/ / Как да изразим “не е равно на” с оператор с превключвател Swift с съвпадение на tuple шаблон [дублиране] - swift

Как да изразя "не е равно на" с изявление на превключвателя на Swift с напасване на шаблона [дубликат] - бързо

Опитвам се да използвам съвпадение на шаблони в превключващо изявление с tuple, за да изразя ясно всички случаи, при които преброяването не е равно на един конкретен случай. Това е съкратена версия на моята декларация за превключване:

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

Това не се компилира очевидно поради неправилното използване на оператора!

Искам първият случай да съвпада с източник .cashVoucher и статут на .awaitingValidation.

Искам вторият случай да съвпада с източник .cashVoucher и всеки статут, с изключение на .awaitingValidation.

Има две решения, за които мога да се сетя досега, ноте не са толкова четливи, колкото бих искал. Бих могъл просто да изброя всички други случаи на статут, но има общо 8 и става трудно за четене. case (.cashVoucher, _, _): и поради реда на случаите на смянаправя това, което аз се опитвам да постигна, но моята декларация за превключване actaully има общо 16 случая и се разчита на реда на случаите на превключване, което затруднява читателя да разбере по мое мнение.

Така че има ли някакъв начин да изразите това, използвайки нещо подобно на != .awaitingValidation Имам по-горе?

Отговори:

4 за отговор № 1

Трябва да можете да го напишете като:

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

Така задайте третата стойност на кортежа на константа (тук st) и употреба where за проверка на равенството.