/ / Jak wyrazić „nie równy” za pomocą instrukcji przełącznika Swift z dopasowaniem wzorca krotki [duplikat]

Jak wyrazić "nie równa się" z instrukcją przełącznika Swift z dopasowaniem krotki [duplicate] - swift

Próbuję użyć dopasowania wzorca w instrukcji switch z krotką, aby wyraźnie wyrazić wszystkie przypadki, w których wyliczenie nie równa się jednemu konkretnemu przypadkowi. Oto skrócona wersja mojej instrukcji zmiany:

switch (source, type, status) {
case (.cashVoucher, _, .awaitingValidation):
return cashVoucherAwaitingValidationMessageComponants
case (.cashVoucher, _, != .awaitingValidation):
return validatedCashVoucherMessageComponants
default:
fatalError("")
}

Nie kompiluje to oczywiście z powodu nieprawidłowego użycia operatora! =, Ale daje wyobrażenie o tym, co próbuję osiągnąć.

Chcę, aby pierwszy przypadek pasował do źródła .cashVoucher i status .awaitingValidation.

Chcę, aby drugi przypadek pasował do źródła .cashVoucher i każdy status oprócz .awaitingValidation.

Są dwa rozwiązania, o których myślę do tej pory, ale„nie są tak czytelne, jak bym chciał. Mógłbym po prostu wymienić wszystkie inne przypadki stanu, ale w sumie jest ich 8 i trudno je odczytać. case (.cashVoucher, _, _): i ze względu na kolejność przypadków przełącznikówrób to, co próbuję osiągnąć, ale moja instrukcja przełączania ma łącznie 16 przypadków i poleganie na kolejności przypadków przełączania utrudnia czytelnikowi zrozumienie.

Czy jest jakiś sposób na wyrażenie tego za pomocą czegoś podobnego do != .awaitingValidation Mam powyżej?

Odpowiedzi:

4 dla odpowiedzi № 1

Powinieneś być w stanie napisać to jako:

switch (source, type, status) {
case (.cashVoucher, _, let st) where st == .awaitingValidation:
return cashVoucherAwaitingValidationMessageComponants
case (.cashVoucher, _, let st) where st != .awaitingValidation:
return validatedCashVoucherMessageComponants
default:
fatalError("")
}

Więc przypisz trzecią wartość krotki do stałej (tutaj st) I użyć where sprawdzić równość.