← Назад к вопросам

При работе с enum в Swift, обрабатывает ли switch все кейсы?

1.2 Junior🔥 191 комментариев
#Язык Swift

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Полнота обработки Enum в Switch выражениях

Исчерпывающие Switch выражения (Exhaustive Switching)

Da, Swift требует обязательную полноту обработки всех кейсов enum в switch выражении. Это гарантирует, что вы обработали все возможные значения.

enum Traffic {
    case red
    case yellow
    case green
}

let light = Traffic.red

switch light {
case .red:
    print("Stop")
case .yellow:
    print("Prepare")
case .green:
    print("Go")
// OK! Все кейсы обработаны
}

// ❌ Ошибка компиляции!
switch light {
case .red:
    print("Stop")
case .yellow:
    print("Prepare")
// Missing .green case
}

Решение с Default case

switch light {
case .red:
    print("Stop")
case .yellow:
    print("Prepare")
default:
    print("Other: \(light)")
// OK! default ловит остальные кейсы
}

Enum с Associated Values

enum Result {
    case success(String)
    case failure(Error)
}

let result = Result.success("Done")

switch result {
case .success(let message):
    print("Success: \(message)")
case .failure(let error):
    print("Error: \(error)")
// Все кейсы обработаны
}

Если добавить новый кейс

enum Traffic {
    case red
    case yellow
    case green
    case blinking  // Новый!
}

// ❌ Теперь switch неполный!
switch light {
case .red:
    print("Stop")
case .yellow:
    print("Prepare")
case .green:
    print("Go")
// Ошибка: Missing .blinking case
}

Добавление нового кейса автоматически даёт compile-time ошибку во всех местах, где switch неполный.

Зачем это нужно

Безопасность: Исключаются runtime ошибки ✅ Рефакторинг: Если добавить кейс, компилятор найдёт все places ✅ Читаемость: Видно, что обработаны все случаи

Это одно из больших преимуществ Swift перед другими языками.