V tem članku se boste naučili uporabljati stavke za nadzor stikal za nadzor poteka izvajanja vašega programa.
Izjava o preklopu je tudi različica stavka Swift control egif-else, guard itd., Ki izvaja različna dejanja glede na različne pogoje.
Lepota stavka switch je, da lahko primerja vrednost z več možnimi vzorci ujemanja. Zato se lahko uporablja kot nadomestek za dolge if… else… if
lestve, medtem ko se ujema s kompleksnim vzorcem.
Sintaksa stavka switch
Sintaksa stavka switch je:
preklopi spremenljivko / izraz (vrednost primera1: // stavki vrednost primera2: // stavki privzeto: // stavki)
Kako deluje izjava o preklopu v Swiftu?
- Izraz stikala se ovrednoti enkrat.
- Vzame izraz in primerja z vsako vrednostjo primera v vrstnem redu (zgoraj -> spodaj).
- Če obstaja ujemanje, se stavek znotraj ohišja izvede in celoten stavek preklopa zaključi svoje izvajanje takoj, ko je končan prvi primerljiv primer preklopa.
- Če primera ni, se preide na naslednji primer.
- Privzeta ključna beseda določa kodo, ki se zažene, če ni ujemanja z velikimi črkami.
Opomba : Telo vsakega primera mora vsebovati vsaj en izvršljiv stavek.
Primer 1: Preprost program z uporabo stavka Switch
let dayOfWeek = 4 switch dayOfWeek ( case 1: print("Sunday") case 2: print("Monday") case 3: print("Tuesday") case 4: print("Wednesday") case 5: print("Thursday") case 6: print("Friday") case 7: print("Saturday") default: print("Invalid day") )
Ko zaženete zgornji program, bo rezultat:
Sreda
V zgornjem programu se stavek stikala začne z ujemanjem vrednosti dayOfWeek s 1. primerom . Ker se vrednost dayOfWeek ne ujema s prvo vrednostjo primera 1, pada v naslednji primer, dokler se ena ne ujema.
Ker se primer 4 ujema s preklopnim izrazom, se stavek print("Wednesday")
v ohišju izvrši in preklopni primer zaključi. Če se ne ujema noben primer, se izvrši stavek znotraj privzete vrednosti .
Primer 2: Izjava o preklopu s padcem
Če fallthrough
v stavku primera uporabite ključno besedo, se nadzor nadaljuje na naslednji primer, tudi če se vrednost primera ne ujema z izrazom stikala.
let dayOfWeek = 4 switch dayOfWeek ( case 1 : print("Sunday") case 2: print("Monday") case 3: print("Tuesday") case 4: print("Wednesday") fallthrough case 5: print("Thursday") case 6: print("Friday") case 7: print("Saturday") default: print("Invalid day") )
Ko zaženete zgornji program, bo rezultat:
Sreda četrtek
V zgornjem programu primer 4 izvede stavek print("Wednesday")
in fallthrough
ključna beseda nadaljuje na primer5 . Stavek print("Thursday")
v primeru 5 se izvrši, tudi če se črka ne ujema z izrazom stikala. Zato lahko v konzoli vidite izhod v četrtek .
Primer 3: Izjava o zamenjavi z bolj zapletenimi vzorci
let programmingLanguage = (name: "Go", version: 10) switch programmingLanguage ( case (let name,let version) where (version < 0 && name.count < 0) : print("Invalid input") case ("Swift",let version) where version == 4: print("Found latest version of Swift") case ("Swift" ,… <4 ): print("Found older version of swift)") case ("Swift" ,4… ) : print("Swift version greater than 4 is not released yet") case ("Taylor Swift",30) : print("OMG. This is Taylor swift") case (let name, let version): print(""" Programming Language:(name) Version: (version) Status: Not found """) )
Ko zaženete zgornji program, bo rezultat:
Programski jezik: Go Različica: 10 Stanje: Ni najdeno
V zgornjem programu primerjamo izraz programsko jezikovno vrsto z različnimi primeri, kot spodaj:
case (let name,let version) where (version < 0 && name.count < 0)
Ta primer veže vrednost izraza stikala na začasne konstante ali spremenljivke za uporabo v telesu primera slet
ključno besedo. To je znano kot vezava vrednosti.
Pogoj za te vrednosti lahko uporabite tudi swhere
klavzulo. Za večkratne pogoje jih lahko združite z&&
operatorjem, kot je v zgornjem primeru.
Če primer ne izpolnjuje pogoja, določenega znotraj stavka where, stavki znotraj tega bloka primerov ne zaženejo in padejo v primerjavo naslednjega primera stikala.case ("Swift" ,… <4 )
Ta primer ujema prvi element tuple z nizom literal"Swift"
in tudi preveri, ali je drugi element znotraj enostranskega obsega… <4
.case ("Swift" ,4… )
Ta primer ujema prvi element tuple z nizom literal"Swift"
in tudi preveri, ali je drugi element znotraj enostranskega obsega4…
.case (let name, let version)
Ta primer veže vse vrednosti nabora na začasne konstante ali spremenljivke.