In dit artikel leert u switch control statements te gebruiken om de stroom van de uitvoering van uw programma te controleren.
De switch-instructie is ook een variant van de Swift-controleverklaring, bijv. Anders, bewaker enz., Die verschillende acties uitvoert op basis van verschillende omstandigheden.
Het mooie van switch-statement is dat het een waarde kan vergelijken met verschillende mogelijke overeenkomende patronen. Daarom kan het worden gebruikt als vervanging voor lange if… else… if
ladders terwijl het bij een complex patroon past.
Syntaxis van switch-instructie
De syntaxis van de instructie switch is:
switch variable / expression (case value1: // statements case value2: // statements default: // statements)
Hoe Switch Statement in Swift werkt?
- De switch-uitdrukking wordt één keer geëvalueerd.
- Het neemt de uitdrukking en vergelijkt met elke case-waarde in de volgorde (Boven -> Onder).
- Als er een match is, wordt de instructie in de case uitgevoerd en wordt de uitvoering van de volledige switch-instructie voltooid zodra de eerste matchende switch-case is voltooid.
- Als er geen match is voor de case, valt het naar de volgende case.
- Het standaard sleutelwoord specificeert de code die moet worden uitgevoerd als er geen hoofdletterovereenkomst is.
Opmerking : de hoofdtekst van elke case moet ten minste één uitvoerbare instructie bevatten.
Voorbeeld 1: eenvoudig programma met behulp van Switch-instructie
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") )
Wanneer u het bovenstaande programma uitvoert, is de uitvoer:
woensdag
In het bovenstaande programma begint de instructie switch met het matchen van dayOfWeek-waarde met case 1 . Aangezien de dayOfWeek-waarde niet overeenkomt met de eerste case-waarde 1, valt deze naar de volgende case totdat er één overeenkomt.
Aangezien case 4 overeenkomt met de expressie switch, wordt de instructie print("Wednesday")
in de case uitgevoerd en wordt switch case beëindigd. Als er geen overeenkomst is gevonden, wordt de instructie binnen standaard uitgevoerd.
Voorbeeld 2: Switch Statement met fallthrough
Als u het fallthrough
sleutelwoord in de case-instructie gebruikt, gaat de besturing door naar de volgende case, zelfs als de case-waarde niet overeenkomt met de switch-expressie.
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") )
Wanneer u het bovenstaande programma uitvoert, is de uitvoer:
woensdag donderdag
In het bovenstaande programma voert case 4 de instructie uit print("Wednesday")
en gaat het fallthrough
trefwoord verder naar case5 . De instructie print("Thursday")
in case 5 wordt uitgevoerd, zelfs als de case niet overeenkomt met de switch-expressie. Daarom kunt u de uitvoer donderdag in de console zien.
Voorbeeld 3: Switch-instructie met meer complexe patronen
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 """) )
Wanneer u het bovenstaande programma uitvoert, is de uitvoer:
Programmeertaal: Go Versie: 10 Status: niet gevonden
In het bovenstaande programma matchen we expressieprogrammeringLanguage van het type tuplemet verschillende gevallen, zoals hieronder:
case (let name,let version) where (version < 0 && name.count < 0)
Deze case bindt de waarde van de expressie-expressie aan tijdelijke constanten of variabelen voor gebruik in de hoofdtekst van de case metlet
trefwoord. Dit staat bekend als waardebinding.
U kunt ook een voorwaarde toepassen op die waarden met eenwhere
clausule. Voor meerdere where-voorwaarden kunt u ze samenvoegen met de&&
operator zoals in het bovenstaande voorbeeld.
Als de case niet voldoet aan de voorwaarde die is gedefinieerd in de where-clausule, worden instructies in dat case-blok niet uitgevoerd en vallen ze niet door om de volgende switch-case te vergelijken.case ("Swift" ,… <4 )
Dit geval komt overeen met het tuple eerste element met de letterlijke tekenreeks"Swift"
en controleert ook of het tweede element binnen het eenzijdige bereik ligt… <4
.case ("Swift" ,4… )
Dit geval komt overeen met het tuple eerste element met de letterlijke tekenreeks"Swift"
en controleert ook of het tweede element binnen het eenzijdige bereik ligt4…
.case (let name, let version)
Dit geval bindt alle waarden van de tupels aan de tijdelijke constanten of variabelen.