Budując projekt w Xcode 11.4 beta 3, pojawia się błąd Swift Compiler na wyliczeniu:
Przypadek wyliczenia ma pojedynczą krotkę jako powiązaną wartość, ale istnieje tutaj kilka wzorców, domyślnie krotkując wzorce i próbując je dopasować
Kod źródłowy:
switch result {
case .error(let err):
//
case .value(let staff, let locations): // <-- error on this line
//
}
Result
jest ogólnym wyliczeniem z powiązanymi wartościami dla .error
i .value
. W tym przypadku powiązaną wartością jest krotka.
public enum Result<T> {
case value(T)
case error(Error)
}
Nie przypominaj sobie wcześniej, aby widział ten błąd, a wyszukiwanie go nie przyniosło żadnych rezultatów. Jakieś pomysły?
Result
, zgadzam się, to stary kod, który poprzedzaSwift.Result
. Nie ma to jednak nic wspólnego z tym problemem.Odpowiedzi:
Odkryłem, że możesz również wyciszyć ten błąd, traktując skojarzoną wartość bardziej jak krotkę, zawijając ją w dodatkowy zestaw nawiasów:
źródło
let
, jeśli chcesz wszystko powiązać:case let .value( (staff, locations) ):
icase .value( let (staff, locations) ):
oba kompilują. Wybierz swoją ulubioną!Ok, rozgryzłem to. Wygląda na to, że
enum
z powiązanymi wartościami, w których typem wartości jest krotka, nie można już dopasować takiej instrukcji switch w ten sposób:Rozwiązanie
Wartości z krotek należy ręcznie wyodrębnić w Xcode 11.4 (Swift 5.2):
źródło
Jest to znany problem: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_release_notes
Na przykład pominięcie nawiasów podczas włączania Opcjonalnego typu krotki powoduje błąd kompilatora:
}
Obejście : Dodaj dodatkowe nawiasy, aby jawnie krotnie wzorzec:
}
źródło
Jeśli mogę, chciałbym również dodać odpowiedź dla
if case
wersji.a następnie oczywiście ignorując wielkość liter:
źródło