Допустим, у меня есть существующий код следующим образом:
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
к существующей функции выше.Единственная проблема заключается в том, что теперь мне выдаст предупреждение: «1007 *.
». Итак, вопрос в том, как я могу защитить свой enum таким образом, чтобы я мог:
- Исчерпывающая обработка всех текущих случаев перечисления, И
- Иметь механизм обработки по умолчанию для будущего неизвестного случая, И
- Просматривать предупреждение только при добавлении новых случаев, и эти случаи должны обрабатываться по умолчаниюcase.
Это означает, что следующий код НЕ ДОЛЖЕН предупреждать:
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 !!")
}
}
Isэто возможно через @unknown или иначе?