При создании проекта в Xcode 11.4 beta 3 я получаю следующую ошибку Swift Compiler:
Случай enum имеет один кортеж в качестве связанного значения, но здесь есть несколько шаблонов, неявно объединяющих шаблоны и пытающихся сопоставить их вместо
Исходный код:
switch result {
case .error(let err):
//
case .value(let staff, let locations): // <-- error on this line
//
}
Result
является общим перечислением со связанными значениями для .error
и .value
. В этом случае ассоциированное значение является набором.
public enum Result<T> {
case value(T)
case error(Error)
}
Не забывайте видеть эту ошибку раньше, и поиск ее не дал никаких результатов. Любые идеи?
Result
, я согласен, это старый код, который предшествуетSwift.Result
. Это не имеет ничего общего с проблемой, хотя.Ответы:
Я обнаружил, что вы можете также заставить эту ошибку замолчать, рассматривая ассоциированное значение как кортеж, заключив его в дополнительный набор скобок:
источник
let
, если вы собираетесь связать все, хотя:case let .value( (staff, locations) ):
иcase .value( let (staff, locations) ):
оба компилировать. Выбери свой любимый!Ок, разобрался. Похоже,
enum
со связанными значениями, где тип значения является набором, больше нельзя сопоставлять с оператором switch следующим образом:Решение
Значения из tupple должны быть извлечены вручную в Xcode 11.4 (Swift 5.2):
источник
Это известная проблема: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_release_notes
Например, оставление скобок при включении Optional типа кортежа приводит к ошибке компилятора:
}
Обходной путь : Добавьте дополнительные скобки, чтобы явно изменить шаблон:
}
источник
Если можно, я бы хотел добавить ответ и для
if case
версии.и тогда конечно игнорируем регистр:
источник