Swift From Scratch Samlinger og Tuples

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.

1. Arrays

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.

Type

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.

Erklæring

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: Array var 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.

mutability

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.

Komme og sette verdier

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]

operasjoner

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.

Komfortmetoder

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

2. Ordbøker

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.

Type

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.

Erklæring

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: ordbok var 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.

Komme og sette verdier

Å 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]

operasjoner

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.

3. Setter

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.

Erklæring

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: Set var 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"]

Manipulering sett

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")

Arrayer eller sett

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å.

4. Tuples

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).

Å få tilgang til verdier

indekser

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.

navnene

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

dekomponering

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

Konklusjon

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.

Lær Swift

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!