I forrige artikkel lærte du om variabler, konstanter og noen av de vanlige datatyper, som heltal, flyter og strenger. I denne artikkelen zoomer vi inn på samlinger. Swifts standardbibliotek definerer tre samlingstyper: sett, arrays og ordbøker. La oss starte med arrayer.
Hvis du er kjent med Objective-C, JavaScript eller PHP, vil det ikke være vanskelig å forstå arrays. Et array er en bestilt, nullindeksert verdiinnsamling. Men det er noen viktige forskjeller mellom arrays for Swift og andre programmeringsspråk.
Den første viktige forskjellen i forhold til arrays i Objective-C er at verdiene som er lagret i en array, alltid er av samme type. I begynnelsen kan dette virke som en betydelig begrensning, men det er faktisk ikke. Faktisk har denne begrensningen en viktig fordel. Vi vet nøyaktig hvilken type vi kommer tilbake når vi spør gruppen for en av verdiene.
En annen viktig forskjell er typen verdier som en matrise kan lagre. I Mål-C kan en matrise bare lagre verdier av en klassetype. Swift har ikke denne begrensningen. Et array i Swift kan lagre strenge, heltal, flyter og klassevaner. Hvordan dette virker og hvorfor dette er mulig i Swift, vil bli klart senere i denne serien når vi dekker klasser og strukturer.
Mens det er flere måter å lage en matrise på, må du huske på at Swift trenger å vite hvilken type verdier du planlegger å lagre i matrisen. Opprett en ny lekeplass i Xcode, som vi gjorde i forrige artikkel, og legg til følgende linjer på lekeplassen din.
var array1: Arrayvar array2: [String] var array3 = ["Apple", "Pear", "Orange"]
Første og andre linjer betyr det samme. Den andre linjen er bare stenografi. De firkantede parentesene innpakker string
søkeord fortell Swift at vi erklærer en matrise som bare kan inneholde string
objekter.
Du kan lese den første linjen med kode som: "Vi erklærer en variabel som heter matrise1
av type Array
som bare kan inneholde string
objekter. "Kolonet betyr av type.
Den tredje linjen viser oss hvordan du initialiserer en matrise ved hjelp av en bokstavlig bokstav. Array-bokstavene ser veldig ut som array-bokstaver i Objective-C. Hovedforskjellen er fraværet av @
symbolet foran firkantede parentesene og streng-bokstavene.
Det er også en fin måte å initialisere en matrise med et forhåndsdefinert antall standardverdier. Syntaxen kan være forvirrende først, men ta et øyeblikk for å la det synke inn.
var a = [String] (gjentatt: "Test", telle: 5)
Den resulterende gruppen inneholder fem strenge, hvor hver streng er lik "Test"
. For bedre å forstå ovennevnte initialisering, ta en titt på følgende to kodelinjer der vi initialiserer et tomt utvalg av strenger.
var b = Array() var c = [String] ()
Ikke bekymre deg hvis du fortsatt er forvirret. Vi vil utforske syntaxen mer detaljert når vi begynner å håndtere klasser og funksjoner. I denne artikkelen fokuserer vi bare på samlinger.
Et aspekt av Swift som du raskt kommer til å sette pris på, er hvordan man erklærer gjensamle samlinger. Ovennevnte kodestykke, for eksempel, erklærer tre mutable arrays. En mutable array er definert ved å bruke Var
søkeord. Det er så enkelt.
Hvis du ikke vil at en matrise skal kunne brukes, bruk så la
søkeord i stedet. Swift har som mål å være intuitiv og enkel å bruke, og implementeringen av mutability er et perfekt eksempel på det målet.
For å få tilgang til verdiene som er lagret i en matrise, bruker vi det samme abonnementssyntaxet som i Mål-C. I det følgende eksempel spør vi array3
for det andre elementet, strengen "Pære"
.
array3 [1]
Bytte ut verdien som er lagret på indeksen 1
er så enkelt som å tilordne en ny verdi ved hjelp av samme subscript syntaks. I det følgende eksemplet erstatter vi "Pære"
på indeksen 1
med "Fersken"
.
array3 [1] = "Peach"
Dette er bare mulig fordi arrayet er mutable, det vil si, vi brukte Var
søkeord for å deklarere matrisen. Det er ikke mulig å mutere en konstant matrise. Det er mer avanserte teknikker for å manipulere innholdet i en matrise, men det underliggende konseptet er det samme.
Fusjonering av to arrays er like enkelt som å legge dem sammen. I det følgende eksemplet erklærer og slår vi sammen to uutviklede arrayer. Merk at den resulterende matrisen, c
, trenger ikke å være mutable for at dette skal fungere.
la a = [1, 2, 3] la b = [4, 5, 6] la c = a + b
Det er imidlertid viktig at verdiene lagret i en
og b
er av samme type. Årsaken skal være åpenbar nå. Som nevnt tidligere, må verdiene som er lagret i en matrise, være av samme type. Følgende eksempel resulterer i en feil.
la a = [1, 2, 3] la b = [1.5, 5.2, 6.3] la c = a + b
For å legge til en matrise i et gjensidig array bruker vi +=
operatør. Merk at operand til høyre er en matrise. Denne operasjonen ville ikke fungere hvis vi fjernet de firkantede parentesene rundt 4
.
var a = [1, 2, 3] a + = [4]
Arrays er objekter som du kan utføre et bredt spekter av operasjoner på. Arrays avslører en rekke funksjoner eller metoder. For å påberope en metode på et objekt, bruker du punktnotasjonen. Legg til følgende linje på lekeplassen din for å legge til et element på array3
.
array3.append ( "Cherry")
La oss se hvor mange elementer array3
inneholder ved å inspisere verdien av sin telle
eiendom. Dette gir utganger 4
til resultatruten.
array3.count
Det er også mulig å sette inn et element på en bestemt indeks ved å påkalle arrayet satt inn (_: i :)
metode som vist nedenfor. De satt inn (_: i :)
Metoden aksepterer mer enn én parameter, og syntaxen kan se litt merkelig ut først.
array3.insert ("Prune", ved: 2)
Like Objective-C støtter Swift navngitte parametere for å forbedre lesbarheten. Resultatet er at koden er lettere å lese og forstå, og funksjoner eller metoder trenger ikke mye forklaring i forhold til hva de gjør. Det er for eksempel klart at satt inn (_: i :)
Metoden setter inn et element på indeksen 2
.
Mens Swift er mer konsistent og mindre ordentlig enn Objective-C, støtter det navngitte parametere. Hvis du kommer fra PHP, Ruby eller JavaScript, så er dette sikkert noe som tar litt vant til.
Hva jeg virkelig liker om Swift er Ruby-lignende bekvemmelighetsegenskaper og metoder for Swifts standardbibliotek. En rekkefølge har for eksempel en er tom
egenskap som forteller deg om arrayet inneholder noen elementer. Dette er ikke noe annet enn shorthand for å sjekke arrayet telle
eiendom. Resultatet er imidlertid kode som er mer konsistent og lettere å lese.
array3.isEmpty
Ordbøker oppfører seg veldig likt ordbøker i Objective-C. En ordbok lagrer en uordnet samling verdier. Hver verdi i ordboken er knyttet til en nøkkel. Med andre ord lagrer en ordbok et antall nøkkel / verdi par.
Som med arrays må nøklene og verdiene som er lagret i en ordbok, være av samme type. Dette betyr at hvis du spør en ordbok for verdien av en bestemt nøkkel, vet du hvilken type ordboken kommer tilbake.
Deklarere en ordbok ligner på å deklarere en matrise. Forskjellen er at du må spesifisere typen for begge taster og verdier. Følgende eksempel viser tre måter å deklarere en ordbok på.
var dictionary1: ordbokvar dictionary2: [String: Int] var dictionary3 = ["Apple": 3, "Pear": 8, "Orange": 11]
Den andre linjen er stenografi for første linjen. Nøklene til disse ordbøkene må være av typen string
mens verdiene forventes å være av typen int
. De Var
Søkeordet indikerer at ordbøkene er mutable.
Du kan lese den første linjen med kode som: "Vi erklærer en variabel som heter dictionary1
av type Ordbok
som bare kan inneholde nøkler av typen string
og verdier av typen int
."
Den tredje linjen illustrerer hvordan vi kan initialisere en ordbok ved hjelp av en ordbok bokstavelig. Dette ligner på syntaksen vi bruker i Objective-C, men merk at curly braces erstattes av firkantede parenteser, og den bokstavelige er ikke prefiks med en @
symbol.
Å få tilgang til verdier ligner på å få tilgang til verdier av en matrise. Den eneste forskjellen er at du bruker nøkkelen i stedet for indeksen av verdien du trenger å få tilgang til. Følgende eksempel illustrerer dette.
la verdi = dictionary3 ["Apple"] print (verdi)
Du vil merke at Xcode forteller oss at verdien av verdi
er ikke 3
, men Valgfritt (3)
. Hva betyr dette? Swift bruker opsjoner til å pakke inn verdier som kan være en av to ting, en verdi eller nil
. Ikke bekymre deg for alternativene på dette punktet. Vi kommer til å fokusere på alternativene i neste artikkel i denne serien. La meg bare fortelle deg at alternativene er et annet viktig konsept for Swift programmeringsspråket.
Det er interessant å påpeke at syntaksen for å få tilgang til en ordlisteverdi er identisk med den for arrays hvis nøklene til ordboken er av typen int
. Ta en titt på følgende eksempel for å se hva jeg mener.
var dictionary4 = [0: "Apple", 1: "Pear", 2: "Orange"] la frukt = ordbok4 [0]
Som med arrays, definerer Swift standardbiblioteket et bredt spekter av operasjoner du kan utføre på ordbøker. Du kan spørre en ordbok for antall nøkkel / verdipar gjennom sin telle
eiendom. Å fjerne et nøkkel / verdi-par er enkelt og intuitivt, som det neste eksemplet illustrerer. Selvfølgelig er dette bare mulig hvis ordlisten er mutable.
dictionary4.removeValue (forKey: 0)
Når du begynner å lære Swift, vil du kanskje finne kodeutdrag som ser merkelig ut eller forvirrende. Ta en titt på følgende linje, der vi først erklærer en ordliste og fjerner deretter nøkkelparametrene.
Var ordbok = [String: Int] () ordbok ["Appelsiner"] = 2 ordbok ["Apples"] = 10 ordbok ["Pears"] = 5 ordbok = [:]
Du må innrømme at den siste linjen ser litt merkelig ut. Fordi Swift vet hva slags nøkler og verdier som kan lagres i ordbok
, tømme ordlisten er like enkelt som å tildele en tom ordbok til den.
Det er ikke nødvendig å spesifisere typene for nøklene og verdiene i dette tilfellet, fordi vi allerede gjorde da vi forklarte ordboken i første linje. Dette peker på en annen viktig detalj, det vil si typen verdier du kan lagre i arrayer og ordbøker kan ikke endres når samlingen er erklært.
Setter er svært lik arrayer ved at de lagrer en samling verdier av samme type. Men det er flere viktige forskjeller. Elementene som er lagret i et sett, er ikke bestilt, og hvert element kan bare vises en gang i et sett.
Arbeide med sett er litt annerledes enn å jobbe med arrays. Ta en titt på de neste eksemplene der vi erklærer tre sett. De sET1
variabel er av typen Sett
, et sett som bare kan inneholde verdier av typen string
.
var set1: Setvar set2 = Sett () var set3: Sett = ["Apple", "Pear", "Orange"]
De SETT2
variabel er et tomt sett, og vi bruker en matrise bokstavelig i det tredje eksemplet for å lage og fylle ut et mutable sett som inneholder tre verdier. Takket være Swifts typeferdighet, kan vi utelate typen av settet.
var set3: Set = ["Apple", "Pear", "Orange"]
Arbeide med settene ligner på å arbeide med arrays. Vi kan be om antall elementer lagret i et sett ved å inspisere settets telle
eiendom.
set3.count
Det er enkelt å sette inn et element. Fordi elementene i et sett er uordnet, trenger vi ikke å spesifisere plasseringen til det nye elementet.
set3.insert ( "beskjære")
Og det samme gjelder for å fjerne et element fra et sett.
set3.remove ( "Orange")
Du kan også spørre et sett hvis det inneholder et bestemt element.
set3.contains ( "Apple")
Jeg refererer ofte til sett som lette versjoner av arrays. Hvis rekkefølgen av elementene ikke er viktig, eller du vil forsikre deg om at hvert element bare kan vises en gang i en samling, er settene veien å gå.
Du kommer til å elske tuples. Tuples er ikke samlinger, men som samlinger, grupperer de også flere verdier. I likhet med arrays og ordbøker, kan tuples inneholde verdier av noe slag. Hovedforskjellen er imidlertid at verdiene som er lagret i en tuple ikke trenger å være av samme type. La oss se på et eksempel for å forklare dette mer detaljert.
Import Foundation var valuta = ("EUR", 0.81) var time = (Dato (), "Dette er min melding.") Var email = ("Bart Jacobs", "[email protected]")
Det første eksempelet erklærer en tuple som heter valuta
det er av typen (Streng, int)
. Den andre tupelen, tid
, inneholder a Dato
forekomst og en streng bokstavelig. Verdiene lagret i e-post
er begge typer string
, som betyr e-post
er av typen (Streng, streng)
.
For å få tilgang til en verdi som er lagret i en tuple, bruker du indeksen som tilsvarer verdien du er interessert i.
var rate = currency.1 var message = time.1 var navn = email.0
Xcode viser oss indeksene for hver verdi lagret i en tuple i resultatruten på lekeplassen til høyre.
For å forbedre lesbarheten kan du navngi verdiene som er lagret i en tuple. Resultatet er at du får tilgang til verdiene til tupelen gjennom navnene deres i stedet for deres indekser. Deklarering av en tuple er litt annerledes i så fall.
var valuta = (navn: "EUR", rate: 0.81) la currencyName = currency.name la currencyRate = currency.rate
Det er en annen, mer elegant måte å jobbe med verdiene lagret i en tuple. Ta en titt på følgende eksempel der vi dekomponerer innholdet i valuta
.
la (currencyName, currencyRate) = valuta
Verdien av valuta
på indeksen 0
er lagret i currencyName
, og verdien på indeksen 1
er lagret i valutakurs
. Det er ikke nødvendig å spesifisere typen for currencyName
og valutakurs
siden Swift infiserer typen fra verdiene som er lagret i valuta
. Med andre ord, currencyName
er av typen string
, og valutakurs
er av typen Flyte
.
Hvis du bare er interessert i bestemte verdier av en tuple, kan du bruke et understreke for å fortelle Swift hvilke verdier du ikke er interessert i.
la (valutanavn, _) = valuta
Arrayer og ordbøker er grunnleggende komponenter i nesten alle programmeringsspråk, og Swift er ikke annerledes. Mens samlinger oppfører seg litt annerledes i Swift, tar det ikke lang tid å bli kjent med Swifts samlingstyper hvis du har jobbet med arrays og ordbøker i andre programmeringsspråk. I neste veiledning undersøker vi opsjoner og kontrollflyt.
Vi har bygget en komplett guide for å hjelpe deg med å lære Swift, enten du er bare i gang med det grunnleggende eller du vil utforske mer avanserte emner.
Hvis du vil komme raskt og raskt med Swift-språket, sjekk ut kurset vårt på å lage iOS-apper med Swift.
Eller sjekk ut noen av våre andre opplæringsprogrammer og kurs på Swift og iOS-utvikling!