Swift fra Scratch: Tilleggsutstyr og kontrollflyt
30
Del
22
Del
Dette Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Swift fra Scratch.Swift fra Scratch:. Samlinger og TuplesSwift fra Scratch: En introduksjon til funksjoner
i tidligere artikler, lært deg noen av de grunnleggende begreper av Swift programmeringsspråk. Hvis du har programmert før, er jeg sikker på at du så noen likheter med andre programmeringsspråk som Ruby, Javascript, og Objective-C.
I denne artikkelen vi zoome inn på kontrollflyt i Swift . Før vi kan diskutere kontrollflyt i mer detalj, må vi ta en titt på et konsept som er nytt for de fleste av dere, optionals. Optionals er en annen sikkerhetsfunksjon av Swift. I begynnelsen kan det se ut som en problemfri å bruke optionals, men du vil raskt lære at optionals vil gjøre koden mye tryggere.
1. Optionals
Vi har allerede sett at en variabel må initialiseres før den kan brukes. Ta en titt på følgende eksempel for å bedre forstå hva dette betyr
Var str. Stringstr.isEmpty
Hvis du er vant til å jobbe med strenger i Objective-C, så du kan bli overrasket over at Swift viser en feil. La oss se hva denne feilen forteller oss.
I mange språk, variabler innledningsvis ha en standardverdi. I Objective-C, for eksempel, er strengen i følgende kodebiten lik null
NSString * newString;.
Men begrepet null forskjellig i Swift og Objective-C. Vi vil diskutere nil nærmere litt senere.
Hva er en valgfri?
Swift bruker optionals å kapsle et viktig begrep, det vil si en variabel eller konstant har en verdi eller det ikke har. Så enkelt er det i Swift. Å erklære en variabel eller konstant som ekstrautstyr, føyer vi et spørsmålstegn til den type variabelen eller konstant
Var str.? String
Den variable str er ikke lenger av typen String. Det er nå av type valgfri En måte å få tilgang til verdien av et eventuelt er gjennom tvungen pakker. Vi kan få tilgang til verdien av variabelen str ved å føye til en! til variabelen navn Det er viktig at du er sikker på at den valgfrie inneholder en verdi når du tvinge pakke den. Hvis den valg ikke har en verdi, og du tvinge pakke den, vil Swift kaste en feil på deg. Det er en tryggere måte å få tilgang til verdien av en valgfri. Vi vil ta en nærmere titt på hvis uttalelser i et par minutter, men følgende eksempel viser hvordan vi kan trygt få tilgang til verdien som er lagret i variabelen str, som er av typen valgfritt String Vi sjekker først om variabelen str er lik null før vi skriver ut innholdet. I dette eksempelet betyr str ikke ha en verdi, noe som betyr at det ikke vil bli tvunget pakket ut ved et uhell. Det er en mer elegant tilnærming kalt valgfri binding. I det følgende eksempel gir vi verdien som er lagret i den alternative til et midlertidig konstant, som brukes i hvis setningen. Verdien av den eventuelle str er bundet til den konstante strConst og anvendt i hvis setningen. Denne tilnærmingen fungerer også for mens uttalelser Hvis du kommer fra Objective-C, så du absolutt vet hva nil er. I Objective-C, er nil en peker til et objekt som ikke eksisterer. Swift definerer nil litt annerledes, og det er viktig at du forstår forskjellen. I Swift, betyr null fravær av en verdi, noen verdi. Mens nil gjelder bare for objekter i Objective-C, kan i Swift nil brukes til enhver type. Det er derfor viktig å forstå at en valgfri er ikke det samme som null i Objective-C. Disse begrepene er svært forskjellige. Swift tilbyr en rekke vanlige konstruksjoner for å kontrollere flyten av koden du skriver. Hvis du har noen erfaring programmering, så har du ingen problemer med å få fart på karrieren med Swifts kontrollflyt konstruerer, betinget hvis og slå uttalelser, og for og mens sløyfer. Men Swift ville ikke være Swift hvis kontrollflyt ikke noe forskjellig fra for eksempel Objective-C kontroll flyt konstruksjoner. Mens detaljene er viktige, er jeg sikker på at de ikke vil hindre deg fra å få fart på karrieren med Swift. La oss starte med den vanligste betinget konstruere, hvis setningen. Swifts hvis uttalelser er svært lik de som finnes i Objective-C. Den største forskjellen er at det er ikke nødvendig å vikle tilstanden i parentes. Klammeparentes, men er obligatorisk. Sistnevnte forhindrer utviklere fra å innføre vanlige feil som er knyttet til å skrive om uttalelser uten klammeparentes. Dette er hva en hvis setningen ser ut i Swift Det bør kommer til ingen overraskelse at Swift definerer også et annet klausul. Koden i annet klausul utføres hvis tilstanden er lik falsk. Det er også mulig å kjede hvis uttalelser som vist i neste eksempel Det er En viktig merknad til å gjøre, det er tilstanden til en hvis setningen må returnere sant eller usant. Dette er ikke sant for hvis uttalelser i Objective-C. Ta en titt på følgende hvis setningen i Objective-C Hvis vi skulle portere ovenfor koden til Swift, vi ville kjøre inn en feil. Feilen er ikke veldig informativ, men Swift gjør fortelle oss at vi må sikre et resultat av tilstanden evalueres til sann eller usann. Den korrekte måten å oversette ovenfor Objective-C biten til Swift er av noe som gjør at tilstanden hvis setningen evalueres til sant eller usant, som i følgende tekstutdraget Swifts bryter uttalelse er kraftigere enn sin Objective-C ekvivalent. Det er også tryggere som du vil lære i et øyeblikk. Mens det er noen forskjeller, bryter uttalelser i Swift holder seg til det samme konseptet som de i andre programmeringsspråk, er en verdi sendes til bryteren uttalelse og det sammenlignes mot mulige matchende mønstre. Det er riktig, mønstre. Som jeg sa, har en bryter uttalelse i Swift et par triks i ermet. Vi vil ta en titt på disse triksene i et øyeblikk. La oss snakke om sikkerhet først. En bryter uttalelse i Swift må være uttømmende, noe som betyr at alle mulige verdien av den typen som er overlevert til den bryter uttalelse må håndteres av bryteren uttalelse. Som i Objective-C, er dette lett løses ved å tilsette en standard tilfelle som i det følgende eksempel En viktig forskjell med Objective-C implementering av bryter uttalelser er mangelen på implisitt fallthrough. Følgende eksempel fungerer ikke i Swift for et par grunner Den første saken der en sammenlignes mot 0 ikke implisitt faller gjennom til andre tilfelle hvor en er sammenlignet mot 1. Hvis du legger eksemplet ovenfor til lekeplass, vil du legge merke til at Swift kaster en feil hos deg. Feilen sier at hvert tilfelle må inkludere minst én kjørbar uttalelse. Legg merke til at tilfeller av bryteren uttalelse ikke inkluderer pause uttalelser for å bryte ut av bryteren uttalelse. Dette er ikke nødvendig i Swift siden implisitt fallthrough ikke eksisterer i Swift. Dette vil eliminere en rekke vanlige feil forårsaket av utilsiktet fallthrough. Kraften av en bryter uttalelse i Swift ligger i mønstergjenkjenning. Ta en titt på følgende eksempel der jeg har brukt områder for å sammenligne regnes verdi mot .. < operatør eller halvåpen range operatør definerer et område fra den første verdien til den andre verdien, unntatt den andre verdien. The ... operatøren eller lukket utvalg operatøren definerer et område fra den første verdien til den andre verdien, inkludert den andre verdien. Disse aktørene er svært nyttig i en rekke situasjoner. Du kan også sammenligne vurderes verdien av en bryter uttalelse til tupler. Ta en titt på følgende eksempel for å se hvordan dette fungerer Som du ser i eksempelet ovenfor, er det mulig at verdien samsvarer med mer enn ett tilfelle. Når dette skjer, er det første samsvar tilfellet valgt. Ovenstående eksempel illustrerer også bruken av strek. Som vi så i forrige artikkel, kan vi bruke en understrekning, _, for å fortelle Swift hvilke verdier vi ikke er interessert i. Verdi binding er også mulig med bryter uttalelser som følgende eksempel viser. Den andre verdi av tuppel er midlertidig bundet til den konstante beskrivelse for bruk i det første og andre tilfelle for loop er den første sløyfen konstruere vi tar en titt på. Den oppfører seg svært likt for løkker på andre språk. Det er to smaker, for loop og for-i loop. Swifts for loop er nesten identisk med en for loop i Objective-C som følgende eksempel viser. For loop utfører en rekke uttalelser til en forhåndsdefinert betingelse er oppfylt Som med hvis uttalelser, det er ikke nødvendig å bruke parenteser til å omslutte loop initialisering, tilstand, og tilvekst definisjoner. The Loop uttalelser, men trenger ikke å være omsluttet av klammeparentes. for bygde sløyfe er ideell for looping over innholdet i et utvalg eller samling. I følgende eksempel, vi løkken over elementene i en matrise. Anmeldelser la tall = [1, 2, 3, 5, 8] for antall i tall {println ("nummer er lik \\ (nummer)")} Vi kan også bruke for bygde looper til løkke over nøkkelverdipar av en ordbok. I følgende eksempel, erklærer vi en ordbok og skrive innholdet til konsollen. Som vi så tidligere i denne serien, er rekkefølgen på nøkkelverdipar udefinert siden en ordbok er en uordnet sett nøkkelverdipar Hver nøkkel-verdi-par av ordlisten er tilgjengelig i for-i løkke som en tuppel av navngitte konstanter. Den for-in sløyfe er også et flott i kombinasjon med rekkefølger. Jeg er sikker på at du enig i at det under biten er lett å lese og forstå takket være bruk av et lukket område. mens loop kommer også i to varianter, mens og gjør-stund. Den viktigste forskjellen er at settet av utsagn av en do-while-loop er alltid utføres minst én gang, fordi tilstanden til do-while evalueres ved slutten av hver iterasjon. Følgende eksempel illustrerer denne forskjellen println uttalelse av mens loop er aldri kjørt mens det av do-while løkke kjøres en gang. I mange tilfeller, for looper kan omskrives som mens sløyfer og det er ofte opp til utvikler for å bestemme hvilken type sløyfe til bruk i en spesiell situasjon. Følgende for og mens sløyfer resultere i samme utgang Hvis du er interessert i å ta din Swift utdanning til neste nivå, kan du ta en titt på vår fulle kurs på Swift utvikling. Det er mye mer å kontrollere flyten i Swift enn hva vi har dekket i denne artikkelen, men du nå har en grunnleggende forståelse for å fortsette reisen inn Swift. Jeg håper denne opplæringen har vist deg at Swifts kontrollflyt gjennomføringen er svært lik som andre programmeringsspråk, med en vri. I resten av denne serien, vil vi gjøre mer bruk av Swifts kontrollflyt konstruksjoner og du vil etter hvert få en bedre forståelse av de subtile forskjeller med språk som Objective-C. I neste utgaven av denne serien, begynner vi å utforske funksjoner.
String. Det er viktig å forstå. Resultatet eller bivirkning er at vi kan ikke lenger direkte kontakt med verdien av den variable str. Verdien er trygt lagret i den valgfrie, og vi må spørre valgfritt for verdien det omslutter.
Tvungen Unwrapping
Var str.? (! str) String str = "Test" println
Valgfritt Bindende
Var str. String ? hvis str! = null {println (str!)} else {println ("str har ingen verdi")}
Var str.? String str = "Test" hvis la strConst = str {println (strConst)} else {println ("str har ingen verdi")}
Hva er nil ?
2. Kontroll Flow
hvis
la a = 10if a >.; 10 {println ("Verdien av \\" a \\ "er større enn 10.")} else {println ("Verdien av \\" a \\ "er mindre enn eller lik 10.")}
la a = 10if a >.; 10 {println ("Verdien av \\" a \\ "er større enn 10.")} else if a > 5 {println ("Verdien av \\" en \\ "er større enn 5.")} else {println ("Verdien av \\" a \\ "er mindre enn eller lik 5.")}
NSArray * rekke = @ [];. If (array.count) {NSLog (@ "Matrisen inneholder ett eller flere elementer.");} Else {NSLog (@ "Matrisen er tom.");}
la rekke = [String] () hvis array.count >.; 0 {println ("Matrisen inneholder ett eller flere elementer.")} Else {println ("Matrisen er tom.")}
slå
Uttømmende
la a = 10switch a {case 0:. Println ("a er lik 0") case 1: println ("a er lik en ") standard: println (" a har en annen verdi ")} Fallthrough
la a = 10switch et {case 0:. Case 1: println ("a er lik 1") standard: println ("a har en annen verdi") }
Mønstre
la a = 10switch et {case 0 .. < 5:. Println ("Verdien av en løgner mellom 0 og 4 .. ") case 5 ... 10: println (" Verdien av en løgner mellom 5 og 10 år ") standard: println (" Verdien av en er større enn 10 ")}
la latlng = (34,15, -78,03) bryter latlng {case (0, 0). Println ("Vi er i sentrum av planeten.") case (0 ... 90, _): println ("Vi er på den nordlige halvkule.") case (-90 ... 0, _): println ("Vi er i den sørlige halvkule.") standard : println (". Den koordinere er ugyldig")}
Verdi Binding
Var respons = (200, "OK") bryter respons {case (200 .. < 400, la beskrivelse). : println ("Forespørselen var vellykket med beskrivelse \\ (beskrivelse).") case (400 .. < 500, la beskrivelse): println ("Forespørselen mislyktes med beskrivelse \\ (beskrivelse).") standard: println ( "Forespørselen mislyktes med ingen beskrivelse.")}
for
for
for var i = 0.; i < 10; i ++ {println ("jeg er lik \\ (i).")}
for bygd
Var bud = ["Tom":. 100, "Bart": 150, "Susan": 120] for (navn, bud) i budene {println (". \\ (navn) 's bud er $ \\ (bud)")}
For jeg i en ... 10 {println ("jeg er lik \\ (i)") }
mens
Var c = 5var d = 5while c <.; d {println ("c er mindre enn d")} do {println ("c er mindre enn d")} mens c < d
for var i = 0.; i < 10; i ++ {println (i)} var i = 0while i < 10 {println (i) i ++}
Les mer i vår Swift Programmering Course
Konklusjon