/ / Як виразити "не дорівнює" за допомогою оператора перемикача Swift із зіставленням зі схемою tuple [duplicate] - swift

Як виразити "не дорівнює" за допомогою оператора перемикання Swift з відповідним шаблоном [дублікат] - швидкий

Я намагаюся використовувати зразок шаблону в операторі switch з кортежем, щоб чітко виразити всі випадки, коли enum не відповідає одному конкретному випадку. Ось коротка версія моєї заяви про перемикання:

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

Очевидно, це не складається через неправильне використання оператора! =, Але це дає вам уявлення про те, що я намагаюся досягти.

Я хочу, щоб перший випадок відповідав джерелу .cashVoucher і статус .awaitingValidation.

Я хочу, щоб друга справа співпала з джерелом .cashVoucher і будь-який статус, окрім .awaitingValidation.

Є 2 рішення, якими я можу думати поки що, алевони "не так читаються, як я хотів би. Я міг би просто перерахувати всі інші випадки статусу, але їх загалом 8 і стає важко читати. Я можу просто використати справи case (.cashVoucher, _, _): і через порядок випадків перемикання він будеробіть те, що я намагаюся досягти, але у моєму викладі перемикання в цілому є 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 перевірити рівність.