Swift fra Scratch: Samlinger og Tuples

Swift fra Scratch: Samlinger og tupler
53
Del
16
Del
Dette Cyber ​​mandag 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:. Variabler og ConstantsSwift fra Scratch: Tilleggsutstyr og kontrollflyt

I forrige artikkel, lærte du om variabler, konstanter, og noen av de vanligste datatyper, slik som heltall, flyter og strenger. I denne artikkelen, vi zoome inn på samlinger. Swifts standard bibliotek definerer to innsamlings typer, arrays og ordbøker. La oss starte med arrays.

1. Arrays

Hvis du er kjent med Objective-C, Javascript, eller PHP, så du ikke vil finne det vanskelig å bryte hodet rundt begrepet arrays. En matrise er en ordnet, null-indeksert samling med verdier. Det er imidlertid noen viktige forskjeller.

Type

Den første viktige forskjellen med arrays i Objective-C er at verdiene som er lagret i en matrise er alltid 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 hva slags vi komme tilbake når vi spør array for en av sine verdier.

En annen viktig forskjell med Objective-C arrays er den type verdier en matrise kan lagre. I Objective-C, kan bare lagre verdier av en klasse type en matrise. Swift har ikke denne begrensningen. En rekke i Swift kan lagre strenger, heltall, flyter samt klasse tilfeller. Hvordan dette fungerer og hvorfor dette er mulig i Swift vil bli klart senere i denne serien når vi dekker klasser og strukturer.

Erklæring

Når du oppretter en matrise kan gjøres på flere måter, du må huske på at Swift trenger å vite hva slags verdier du har tenkt å lagre i rekken. Opprett en ny lekeplass i Xcode som vi gjorde i den forrige artikkelen og legge til følgende linjer i din lekeplass
Var matrise1: Array < String > Var matrise2. [String] Var array3 = ["Apple", "Pear", "Orange"]

Den andre linjen er forkortelse for den første linjen. Hakeparenteser innpakning String ordet forteller Swift at vi erklære en matrise som kun 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 stedene. " Merk at jeg kursiv av type
siden det er hva kolon betyr.

Den tredje linjen viser oss hvordan å initial en array ved hjelp av en rekke bokstavelig. Array litteraler ser veldig lik array-konstanter i Objective-C. Den største forskjellen er fraværet av @ -symbolet foregående hakeparenteser og strenger.

Det er også en fancy måte å initialisere en matrise med et forhåndsdefinert antall standardverdier. Syntaksen kan være forvirrende i starten, men ta deg tid til å la det synke inn
Var a = [String] (count: 5, repeatedValue: "Test").

Den resulterende matrisen inneholder fem strenger, med hver streng er lik "Test". For bedre å forstå ovenfor initialisering, ta en titt på følgende to linjer med kode som initialiserer vi en tom tabell med strenger
Var b = Array. ≪ String > () Var c = [String] ()

Ikke bekymre deg hvis du fremdeles er forvirret. Vi vil utforske syntaksen i mer detalj når vi begynner å gjøre med klasser og funksjoner. I denne artikkelen skal vi bare fokuserer på samlinger.

mutability

Et aspekt av Swift at du raskt kommer til å sette pris på er hvordan man skal erklære foranderlig samlinger. Ovennevnte kodebiten, for eksempel, erklærer tre foranderlig arrays. En foranderlig matrise er definert ved å bruke VAR søkeord. Det er så enkelt. Hvis du ikke ønsker en matrise for å være foranderlig, bruk deretter la søkeordet i stedet. Swift har som mål å være intuitive og enkle å bruke, og Swift implementering av mutability er et perfekt eksempel på dette målet.

Komme og innstillingsverdier

For å få tilgang til de verdiene som er lagret i en matrise Vi bruker den samme indeksen syntaks som i Objective-C. I følgende eksempel, ber vi array3 for sin andre element, strengen "pære".
Array3 [1]

Skifte verdien som er lagret på indeks 1 er så enkelt som å tildele en ny verdi ved hjelp av samme senket syntaks. I følgende eksempel, vi erstatte "pære" på index en med "fersken".
Array3 [1] = "Peach"

Dette er bare mulig fordi matrisen er foranderlig, det vil si, vi brukte Var søkeord å erklære array. Mutere en konstant matrise er ikke mulig. Det finnes mer avanserte teknikker for å manipulere innholdet i en matrise, men den underliggende konseptet er det samme.

Sammenslåing to matriser er like enkelt som å legge dem sammen. I følgende eksempel, vi forkynner og slå sammen to uforanderlige arrays. Legg merke til at den resulterende matrisen, c, trenger ikke å være foranderlig for at dette skal fungere.
La a = [1, 2, 3] la b = [4, 5, 6] la c = a + b < p> Det er imidlertid nøkkelen at verdiene som er lagret i A og B er av samme type. Grunnen burde være innlysende nå. De verdier som er lagret i en matrise må være av samme type. Følgende eksempel vil resultere i en feil.
La a = [1, 2, 3] la b = [1,5, 5,2, 6,3] la c = a + b

Hvis du vil legge til en matrise til en foranderlig array, Vi bruker + = operatør. Merk at operand til høyre er en matrise. Denne operasjonen vil ikke fungere hvis vi fjernet hakeparenteser rundt 4.
Var a = [1, 2, 3] a + = [4]
Drift

Arrays er objekter som du kan utføre et bredt spekter av operasjoner. Arrays avsløre en rekke funksjoner eller metoder. Å påkalle en metode på et objekt, bruker du dot notasjon. Legg til følgende linje i din lekeplass for å legge til et element i array3.
Array3.append ("Cherry")

La oss se hvor mange elementer array3 inneholder ved å kalle sin metode for å telle. Dette utganger 4 i resultatruten på høyre side.
Array3.count

Det er også mulig å sette inn et element på en bestemt indeks ved å påberope tabellens innsatsen metode som vist nedenfor. Innsatsen metoden godtar mer enn én parameter, og det kan se litt rart i begynnelsen
array3.insert ("sviske", atIndex: 2).

Som Objective-C, Swift støtter navngitte parametere for å forbedre lesbarheten. Resultatet er at koden er lettere å lese og forstå, og funksjoner eller metoder trenger ikke mye å forklare i forhold til hva de gjør. Det er klart, for eksempel at innsatsen metoden setter inn et element ved indeks 2.

Mens Swift er mer konsis og mindre detaljert enn Objective-C, den støtter oppkalt parametere. Hvis du kommer fra PHP, Ruby, eller Javascript, så dette er absolutt noe som vil ta litt tid å bli vant til.

Convenience Metoder

Det jeg virkelig liker om Swift er Ruby- som dagligvare egenskapene og metodene for Swifts standard bibliotek. En matrise, for eksempel, har en tom bil eiendom som forteller deg om rekken inneholder noen elementer. Dette er noe mer enn stenografi for å sjekke tabellens teller eiendom. Resultatet er imidlertid kode som er mer konsis og lettere å lese.
Array3.isEmpty
2. Ordbøker

Ordbøker oppfører seg svært likt ordbøker i Objective-C. En ordbok lagrer en uordnet samling med verdier. Hver verdi i ordlisten er forbundet med en nøkkel. Med andre ord, en ordbok lagrer en rekke sentrale /verdi-par.

Type

Som med arrays, nøkler og verdier lagret i en ordbok må 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 ordlisten kommer tilbake.

Declaration

Erklærte en ordbok er lik erklære en matrise. Forskjellen er at du må spesifisere type for både nøkler og verdier. Følgende eksempel viser tre måter å erklære en ordbok
Var dictionary1: ordbok < String, Int > Var dictionary2:. [String: Int] Var dictionary3 = ["Apple": 3, "Pear": 8, "Orange" : 11]

Den andre linjen er forkortelse for den første linjen. Tastene for disse ordbøker trenger å være av typen String, mens de verdier som er forventet å være av typen Int. VAR nøkkelord indikerer at ordbøkene er foranderlig.

Du kan lese den første linjen med kode som "Vi erklærer en variabel med navn dictionary1 av typen
ordbok som bare kan inneholde nøklene 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 klammeparentes er erstattet med klammeparenteser og bokstavelig er ikke prefikset med en @ -symbolet.

Komme og innstillingsverdier
< p> Tilgang verdier er lik tilgang til verdier i en matrise. Den eneste forskjellen er at du bruker tasten i stedet for indeksen av verdien du trenger for å få tilgang. Følgende eksempel illustrerer dette.
La value = dictionary3 ["Apple"] println (verdi)

Du vil merke at Xcode forteller oss at verdien av verdi er ikke tre, men Valgfritt (3). Hva betyr dette? Swift bruker optionals å bryte verdier som kan være en av to ting, en verdi eller null. Ikke bekymre deg om optionals på dette punktet. Vi kommer til å fokusere på optionals i neste artikkel i denne serien. La meg bare fortelle deg at optionals er et annet sentralt begrep om Swift programmeringsspråk.

Det er interessant å påpeke at syntaksen til å få tilgang til en verdi av en ordbok er identisk med arrays hvis nøklene til ordlisten er av typen Int. . Ta en titt på følgende eksempel for å se hva jeg mener
Var dictionary4 = [0: "Apple", en: "Pære", 2: "Orange"] la frukt = dictionary4 [0]
Operations

Som med arrays, Swift standard bibliotek definerer et bredt spekter av operasjoner du kan utføre på ordbøker. En ordbok returnerer antall nøkkel /verdi-par ved å ringe teller på den. Fjerne en nøkkel /verdi-par er enkelt og intuitivt som det neste eksempelet illustrerer. Selvfølgelig er dette bare mulig hvis ordlisten er foranderlig.
Dictionary4.removeValueForKey (0)

Når du begynner å lære Swift, vil du av og til kjøre inn kodesnutter som ser rart eller forvirrende. . Ta en titt på følgende linje der vi først erklære en ordbok og deretter fjerne sine nøkkel /verdi-par
Var ordboken = [String: Int] () ordbok ["Appelsiner"] = 2dictionary ["Epler"] = 10dictionary ["Pærer"] = 5dictionary = [:]

Du må innrømme at den siste linjen ser litt rart. Fordi Swift vet hvilke typer nøkler og verdier som kan lagres i ordboken, tømming ordlisten er så enkelt som å tildele en tom ordbok til det.

Det er ikke nødvendig å spesifisere hvilke typer for nøkler og verdier i dette tilfellet, fordi vi allerede visste når vi erklærer ordlisten i første linje. Dette peker ut en annen viktig detalj, det vil si den type verdier du kan lagre i arrays og ordbøker kan ikke endres når samlingen er deklarert.

3. Tupler

Du kommer til å elske tupler. Mens tuples ikke samlinger, de også gruppere flere verdier. I likhet med arrays og ordbøker, kan tuples inneholde verdier av en hvilken som helst type. Hovedforskjellen er imidlertid at verdiene som er lagret i en tuppel ikke trenger å være av samme type. La oss se på et eksempel for å forklare dette nærmere.
Var valuta = ("EUR", 0,81) Var tid = (NSDate (), "Dette er mitt budskap.") Var email = ("Bart Jacobs", "[email protected]")

Det første eksemplet erklærer en tuppel heter valuta som er av type (String, Int). Den andre tuppel, tid, inneholder en NSDate forekomst og en streng bokstavelig. Verdiene er lagret i e-post er begge av type String, noe som betyr at e-posten er av type (String, String).

Tilgang Verdier

avskriftene

For å få tilgang til en verdi som er lagret i en tuppel, bruker du indeksen som tilsvarer verdien du er interessert i.
Var rate = currency.1var melding = time.1var name = email.0

Xcode viser oss indeksene av hver verdi lagret i et tuppel i resultatruten av lekeplassen til høyre.

Navn

For å bedre lesbarhet, kan du nevne de verdiene som er lagret i et tuppel. Resultatet er at du kan få tilgang til verdiene av tuppel gjennom deres navn i stedet for sine indekser. Erklære en tuppel er litt annerledes i så fall
Var valuta = (navn: "EUR", rente: 0,81). La currencyName = currency.namelet currencyRate = currency.rate

Det er en Nedbrytning
sekund, mer elegant måte å arbeide med verdier som er lagret i en tuppel. Ta en titt på følgende eksempel der dekomponerer vi innholdet i valuta.
La (currencyName, currencyRate) = valuta

Verdien av valuta på indeks 0 lagres i currencyName og verdien på indeksen en er lagret i currencyRate. Det er ikke nødvendig å spesifisere type for currencyName og currencyRate siden Swift konkluderer type fra verdiene som er lagret i valuta. Med andre ord, er currencyName av type String og currencyRate er av typen Float.

Hvis du bare er interessert i bestemte verdier av en tuppel, kan du bruke en understrekning for å fortelle Swift hvilke verdier du ikke er interessert i.
la (currencyName, _) = valuta
Les mer i vår Swift Programmering Course

Ta Swift utdanning til neste nivå og lære om alt fra Lekeplasser gjennom til objektorientert programmering i vår hele kurset på Swift utvikling.

Konklusjon

Arrays og ordbøker er grunnleggende komponentene i nesten alle programmeringsspråk og Swift er ikke annerledes. Mens samlingene oppfører seg litt annerledes i Swift, tar det ikke lang tid å bli kjent med Swifts samling typer hvis du har jobbet med arrays og ordbøker i andre programmeringsspråk. I neste opplæringen, vi utforske optionals og kontrollflyt.