"Snažím sa použiť porovnávanie vzorov v príkaze switch s n-tičkou, aby som jasne vyjadrila všetky prípady, v ktorých sa enum nezhoduje s jedným konkrétnym prípadom." Tu je skrátená verzia môjho príkazu switch:
switch (source, type, status) {
case (.cashVoucher, _, .awaitingValidation):
return cashVoucherAwaitingValidationMessageComponants
case (.cashVoucher, _, != .awaitingValidation):
return validatedCashVoucherMessageComponants
default:
fatalError("")
}
To nie je "kompilovať samozrejme z dôvodu nesprávneho použitia operátora! =, Ale dáva vám predstavu o tom, čo sa snažím dosiahnuť."
Chcem, aby prvý prípad zodpovedal zdroju .cashVoucher
a stav .awaitingValidation
.
Chcem, aby druhý prípad zodpovedal zdroju .cashVoucher
a akýkoľvek štatút okrem .awaitingValidation
.
Existujú 2 riešenia, ktoré si doposiaľ môžem predstaviť, ale"Nie sú tak čitateľné, ako by som chcel. Jednoducho by som mohol vymenovať všetky ostatné prípady, ale celkovo je ich 8 a stáva sa ťažko čitateľným. case (.cashVoucher, _, _):
a vzhľadom na poradie prípadov prepnutia, ktoré by to bolorobiť to, čo som "m snaží dosiahnuť, ale môj príkaz switch actaully má celkom 16 prípadov a spoliehať sa na poradie prípadov prepínača, aby bolo pre čitateľa ťažšie pochopiť podľa môjho názoru.
Takže existuje nejaký spôsob, ako to vyjadriť pomocou niečoho podobného != .awaitingValidation
Mám vyššie?
odpovede:
4 pre odpoveď č. 1Mali by ste byť schopní napísať ho ako:
switch (source, type, status) {
case (.cashVoucher, _, let st) where st == .awaitingValidation:
return cashVoucherAwaitingValidationMessageComponants
case (.cashVoucher, _, let st) where st != .awaitingValidation:
return validatedCashVoucherMessageComponants
default:
fatalError("")
}
Priraďte tretiu hodnotu n-tice konštante (tu st
) a použitie where
kontrolu rovnosti.