Изучите iOS-разработку

Как использовать Unknown по умолчанию в операторах Swift Switch

Изучите новую функцию коммутатора Swift 5.5: неизвестна

В Swift оператор switch — это мощная конструкция потока управления, используемая для обработки различных случаев или условий. Начиная с Swift 5.5, была введена новая функция, называемая unknown default, для повышения гибкости оператора switch и возможностей обработки ошибок. В этом блоге мы рассмотрим концепцию значения unknown по умолчанию в операторах Swift switch, поймем их значение и предоставим практические примеры их эффективного использования.

Понимание unknown по умолчанию

До Swift 5.5 операторы switch требовали исчерпывающей проверки всех возможных случаев. Если вы вводили в перечисление новый регистр или новый подтип, вам приходилось обновлять все существующие операторы switch, чтобы они обрабатывали его явно. Это может быть чревато ошибками и утомительно.

Значение по умолчанию unknown решает эту проблему, предоставляя универсальный случай, который корректно обрабатывает любые неизвестные случаи или значения. Он предназначен для повышения надежности кода и снижения риска ошибок во время выполнения, вызванных неполными операторами switch.

Вот основной синтаксис оператора switch со значением по умолчанию unknown:

switch value {
case knownCase1:
    // Handle knownCase1
case knownCase2:
    // Handle knownCase2
// ...
@unknown default:
    // Handle unknown cases
}

Случай @unknown default позволяет вам обеспечить резервное поведение для случаев, которые неизвестны на момент написания оператора switch.

Значение unknown по умолчанию

Введение значения по умолчанию unknown дает несколько преимуществ при разработке кода Swift:

  1. Прямая совместимость. Используя значение по умолчанию unknown, вы можете сделать свой код более устойчивым к будущим изменениям. Если в перечисление или тип добавляются новые случаи или значения, @unknown default гарантирует, что ваш код по-прежнему будет работать без сбоев или неожиданного поведения.
  2. Предотвращение ошибок. Это помогает предотвратить ошибки во время выполнения, которые могут возникнуть при обработке неизвестных случаев. Это особенно важно при работе со сложными перечислениями или типами, где легко пропустить обработку всех возможных случаев.
  3. Сокращение обслуживания. Вам не нужно обновлять операторы switch каждый раз, когда в базовые типы данных вносятся изменения. Это снижает затраты на обслуживание и риск появления ошибок.

Использование unknown по умолчанию на практике

Давайте рассмотрим несколько практических примеров, чтобы увидеть, как эффективно использовать значение по умолчанию unknown в коде Swift.

Пример 1. Обработка неизвестных случаев перечисления

enum DayOfWeek {
    case sunday, monday, tuesday, wednesday, thursday, friday, saturday
}

func getDayType(day: DayOfWeek) -> String {
    switch day {
    case .sunday, .saturday:
        return "Weekend"
    @unknown default:
        return "Unknown Day"
    }
}

let day = DayOfWeek.thursday
let dayType = getDayType(day: day)
print("Day is \(dayType)")

В этом примере перечисление DayOfWeek представляет дни недели. Мы обрабатываем известные случаи, такие как sunday и saturday, но случай @unknown default гарантирует, что любые будущие дополнения к перечислению корректно обрабатываются с помощью резервного варианта «Неизвестный день».

Пример 2: Обработка неизвестных подтипов

protocol Animal { }

struct Dog: Animal {
    let name: String
}

struct Cat: Animal {
    let name: String
}

func animalSound(animal: Animal) -> String {
    switch animal {
    case let dog as Dog:
        return "\(dog.name) barks"
    case let cat as Cat:
        return "\(cat.name) meows"
    @unknown default:
        return "Unknown Animal"
    }
}

let rover = Dog(name: "Rover")
let fluffy = Cat(name: "Fluffy")
let unknownAnimal: Animal = Rover

print(animalSound(animal: rover))          
print(animalSound(animal: fluffy))        
print(animalSound(animal: unknownAnimal))

В этом примере у нас есть два подтипа протокола Animal: Dog и Cat. Случай @unknown default в функции animalSound обрабатывает любые неизвестные подтипы, гарантируя, что код останется устойчивым при появлении новых подтипов Animal.

Заключение

Значение по умолчанию unknown в операторах switch Swift является ценным дополнением к языку, обеспечивающим лучшую устойчивость к неизвестным случаям и снижающим риск ошибок во время выполнения. Включив регистр @unknown default в свой код, вы можете сделать его более перспективным, простым в обслуживании и менее подверженным неожиданным проблемам, вызванным изменениями в ваших типах данных. Использование этой функции — шаг к написанию более надежного и адаптируемого кода Swift.