Скажем, у меня есть существующий код следующим образом:
enum SomeEnumCases {
case existing
case alreadyExisting
}
func doSomething(withEnums enumCase: SomeEnumCases) {
switch enumCase {
case .existing:
print("This case was already existing")
case .alreadyExisting:
print("This case was already existing too...")
}
}
Теперь, если бы я добавил новый случай в перечисление, вышеприведенная функция показала бы ошибку компиляции, говорящую, что случай переключателя должен быть исчерпывающим, и я был бы ВЫНУЖДЕН обработать новый отсутствующий случай. Я бы добавил третий случай в оператор switch или добавил оператор по умолчанию.
Теперь я приказываю обрабатывать такие непредвиденные случаи перечисления, я хотел бы добавить случай @unknown default
к существующей функции выше. Единственная проблема в том, что теперь он выдаст мне предупреждение о том, что Default will never be executed
.
Итак, вопрос в том, как мне защитить свое перечисление от будущего, чтобы я мог:
- Исчерпывающая обработка всех текущих случаев enum, И
- Иметь механизм обработки по умолчанию для будущего неизвестного случая, И
- Предупреждение отображается только при добавлении новых обращений, и эти обращения должны обрабатываться обращением по умолчанию.
Это означает, что следующий код НЕ ДОЛЖЕН выдавать предупреждения:
enum SomeEnumCases {
case existing
case alreadyExisting
}
func doSomething(withEnums enumCase: SomeEnumCases) {
switch enumCase {
case .existing:
print("This case was already existing")
case .alreadyExisting:
print("This case was already existing too...")
@unknown default: // <-- warning: Default will never be executed: should be suppressed
print("Alright, this is something new and exciting !!")
}
}
но следующий код ДОЛЖЕН выдавать предупреждение:
enum SomeEnumCases {
case existing
case alreadyExisting
case new
}
func doSomething(withEnums enumCase: SomeEnumCases) {
switch enumCase { // <-- warning: Switch must be exhaustive: This should stay.
case .existing:
print("This case was already existing")
case .alreadyExisting:
print("This case was already existing too...")
@unknown default:
print("Alright, this is something new and exciting !!")
}
}
Возможно ли это через @unknown или как-то иначе?