← Назад к вопросам
При работе с 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 перед другими языками.