Swift From Scratch Samlingar och Tuples

I den föregående artikeln lärde du dig om variabler, konstanter och några av de vanliga datatyperna, som heltal, floats och strängar. I denna artikel zoomar vi in ​​på samlingar. Swifts standardbibliotek definierar tre samlingstyper: uppsättningar, arrays och ordböcker. Låt oss börja med arrays.

1. Arrays

Om du är bekant med Objective-C, JavaScript eller PHP, blir det inte svårt att förstå arrays. En array är en beställd, nollindexerad värdesamling. Men det finns några viktiga skillnader mellan arrays för Swift och andra programmeringsspråk.

Typ

Den första viktiga skillnaden jämfört med arrays i Objective-C är att värdena som lagras i en array alltid är av samma typ. Först kan det verka som en betydande begränsning, men det är det faktiskt inte. Faktum är att denna begränsning har en viktig fördel. Vi vet exakt vilken typ vi kommer tillbaka när vi frågar arrayen för ett av dess värden.

En annan viktig skillnad är den typ av värden en array kan lagra. I mål-C kan en array bara lagra värden för en klasstyp. Swift har inte denna begränsning. En array i Swift kan lagra strängar, heltal, floats och klassinstanser. Hur detta fungerar och varför det här är möjligt i Swift kommer att bli tydligt senare i denna serie när vi täcker klasser och strukturer.

Deklaration

Medan det finns flera sätt att skapa en array, måste du komma ihåg att Swift behöver veta vilken typ av värden du planerar att lagra i arrayen. Skapa en ny lekplats i Xcode, som vi gjorde i föregående artikel, och lägg till följande rader på din lekplats.

var array1: Array var array2: [String] var array3 = ["Apple", "Pear", "Orange"]

Den första och andra raden betyder samma sak. Den andra raden är bara stenografi. De torgformiga parentesna omsluter Sträng sökord berätta Swift att vi förklarar en array som bara kan innehålla Sträng objekt.

Du kan läsa den första raden av kod som: "Vi förklarar en variabel som heter matris1 av typ Array som bara kan innehålla Sträng objekt. "Kolonet betyder av typ.

Den tredje raden visar oss hur man initialiserar en array med hjälp av en array bokstavlig. Array-bokstäver ser väldigt ut som array-bokstäver i mål-C. Huvudskillnaden är frånvaron av @ symbol som föregår torgets parentes och strängtexten.

Det finns också ett fint sätt att initiera en array med ett fördefinierat antal standardvärden. Syntaxen kan vara förvirrande först, men ta en stund att låta det sjunka in.

var a = [String] (upprepa: "Test", räkna: 5)

Den resulterande raden innehåller fem strängar, där varje sträng är lika med "Testa". För att bättre förstå ovanstående initialisering, ta en titt på följande två kodkategorier där vi initierar en tom rad strängar.

var b = Array() var c = [String] ()

Oroa dig inte om du fortfarande är förvirrad. Vi utforskar syntaxen närmare när vi börjar hantera klasser och funktioner. I den här artikeln fokuserar vi bara på samlingar.

Föränderlighet

En aspekt av Swift som du snabbt kommer att uppskatta är hur man förklarar mutable samlingar. Ovanstående kodbit, förklarar exempelvis tre mutable arrays. En mutabel array definieras genom att använda var nyckelord. Det är så enkelt.

Om du inte vill att en array ska vara smidig, använd sedan låta sökord istället. Swift syftar till att vara intuitivt och lätt att använda, och dess genomförande av mutability är ett perfekt exempel på det målet.

Komma och ställa in värden

För att komma åt värdena som lagras i en array använder vi samma prenumerationssyntax som i Mål-C. I följande exempel frågar vi array3 för dess andra element, strängen "Päron".

array3 [1]

Byta värde lagrat i index 1 är lika enkelt som att tilldela ett nytt värde med samma subscriptsyntax. I det följande exemplet ersätter vi "Päron" på index 1 med "Persika".

array3 [1] = "Peach"

Detta är endast möjligt eftersom arrayen är mutabel, det vill säga vi använde var sökord för att deklarera matrisen. Att mutera en konstant uppsättning är inte möjlig. Det finns mer avancerade tekniker för att manipulera innehållet i en array, men det underliggande konceptet är detsamma.

Sammanfoga två arrays är lika enkelt som att lägga dem ihop. I följande exempel förklarar och sammanfogar vi två oföränderliga arrays. Observera att den resulterande matrisen, c, behöver inte vara mutable för att detta ska fungera.

låt a = [1, 2, 3] låt b = [4, 5, 6] låt c = a + b

Det är dock viktigt att de värden som lagras i en och b är av samma typ. Anledningen skulle vara uppenbart nu. Som jag nämnde tidigare måste värdena som lagras i en array vara av samma typ. Följande exempel resulterar i ett fel.

låt a = [1, 2, 3] låt b = [1.5, 5.2, 6.3] låt c = a + b

För att lägga till en matris till en variabel array använder vi += operatör. Observera att operand till höger är en matris. Denna operation skulle inte fungera om vi tog bort de firkantiga parenteserna 4.

var a = [1, 2, 3] a + = [4]

Operationer

Arrayer är föremål där du kan utföra ett brett spektrum av operationer. Arrays avslöjar ett antal funktioner eller metoder. För att anropa en metod på ett objekt använder du pricknotationen. Lägg till följande rad på din lekplats för att lägga till ett objekt till array3.

array3.append ( "Cherry")

Låt oss se hur många saker array3 innehåller genom att inspektera värdet av dess räkna fast egendom. Detta matar ut 4 till resultatrutan.

array3.count

Det är också möjligt att infoga ett objekt i ett specifikt index genom att påkalla arrayen infoga (_: vid :) metod som visas nedan. De infoga (_: vid :) Metoden accepterar mer än en parameter, och syntaxen kan se lite udda först.

array3.insert ("Prune", vid: 2)

Liksom Objective-C stöder Swift namngivna parametrar för att förbättra läsbarheten. Resultatet är att koden är lättare att läsa och förstå, och funktioner eller metoder behöver inte mycket förklarande vad gäller vad de gör. Det är till exempel tydligt att infoga (_: vid :) Metoden infogar ett element i indexet 2.

Medan Swift är mer koncis och mindre verbos än Objective-C, stöder den namngivna parametrar. Om du kommer från PHP, Ruby eller JavaScript, så är det verkligen något som väntar på att bli van vid.

Bekvämlighet Metoder

Vad jag verkligen tycker om Swift är de Ruby-liknande bekvämlighetsegenskaper och metoder för Swifts standardbibliotek. En array har till exempel en är tom egenskap som berättar om arrayen innehåller några element. Detta är inget annat än kortfattat för att kontrollera arrayen räkna fast egendom. Resultatet är emellertid kod som är mer koncis och lättare att läsa.

array3.isEmpty

2. Ordböcker

Ordböcker beter sig väldigt likt ordböcker i mål-C. En ordbok lagrar en oordnad värdesamling. Varje värde i ordlistan är kopplat till en nyckel. Med andra ord lagrar en ordbok ett antal nyckel / värdepar.

Typ

Liksom med arrays måste nycklarna och värdena som lagras i en ordlista vara av samma typ. Det betyder att om du frågar en ordlista för värdet av en viss nyckel vet du vilken typ ordlistan kommer att returnera.

Deklaration

Att deklarera en ordbok liknar att deklarera en matris. Skillnaden är att du måste ange typen för både nycklar och värden. Följande exempel visar tre sätt att deklarera en ordlista.

var dictionary1: ordbok var dictionary2: [String: Int] var dictionary3 = ["Apple": 3, "Pear": 8, "Orange": 11]

Den andra raden är stenografi för första raden. Nycklarna till dessa ordböcker måste vara av typ Sträng medan värdena förväntas vara av typen int. De var nyckelordet indikerar att ordböckerna är mutable.

Du kan läsa den första raden av kod som: "Vi förklarar en variabel som heter dictionary1 av typ Ordbok som bara kan innehålla nycklar av typen Sträng och värden av typ int."

Den tredje raden illustrerar hur vi kan initiera en ordlista med hjälp av en ordbok bokstavlig. Detta liknar den syntax vi använder i Objective-C, men observera att de krökta stagarna ersätts med kvadratparentes och den bokstavliga är inte prefixad med en @ symbol.

Komma och ställa in värden

Åtkomst av värden liknar att man får tillgång till värden för en array. Den enda skillnaden är att du använder nyckeln istället för indexet för det värde du behöver komma åt. Följande exempel illustrerar detta.

låt värdet = dictionary3 ["Apple"] print (value)

Du märker att Xcode berättar för oss att värdet på värde är inte 3, men Valfritt (3). Vad betyder det här? Swift använder alternativ för att sätta in värden som kan vara en av två saker, ett värde eller noll. Oroa dig inte om alternativen vid denna tidpunkt. Vi kommer att fokusera på alternativ i nästa artikel i denna serie. Låt mig bara berätta att alternativ är ett annat viktigt begrepp i Swift programmeringsspråket.

Det är intressant att påpeka att syntaxen för att komma åt ett värde i en ordlista är identisk med den för arrays om ordlistorna är av typ int. Ta en titt på följande exempel för att se vad jag menar.

var dictionary4 = [0: "Apple", 1: "Pear", 2: "Orange"] låt frukt = dictionary4 [0]

Operationer

Som med arrays definierar Swift standardbiblioteket ett brett spektrum av operationer som du kan utföra på ordböcker. Du kan fråga en ordlista för dess antal nyckel / värdepar genom dess räkna fast egendom. Att ta bort ett nyckel / värdepar är enkelt och intuitivt, som det följande exemplet illustrerar. Det här är naturligtvis bara möjligt om ordlistan är omöjlig.

dictionary4.removeValue (förKey: 0)

När du börjar lära dig Swift kommer du kanske att köra in kodrader som ser udda eller förvirrande. Ta en titt på följande rad, där vi först deklarerar en ordlista och tar bort dess nyckel / värdepar.

var dictionary = [String: Int] () ordbok ["Apelsiner"] = 2 ordbok ["Äpplar"] = 10 ordbok ["Pears"] = 5 ordbok = [:]

Du måste erkänna att den sista raden ser lite udda ut. Eftersom Swift vet vilka typer av nycklar och värden som kan lagras i ordbok, tömning av ordlistan är lika enkelt som att tilldela en tom ordbok till den.

Det finns inget behov av att ange typerna för nycklarna och värdena i det här fallet, eftersom vi redan gjorde när vi förklarade ordlistan i första raden. Detta pekar på en annan viktig detalj, det vill säga typen av värden du kan lagra i arrayer och ordböcker kan inte ändras när samlingen är deklarerad.

3. Satser

Satser är mycket liknade arrays genom att de lagrar en samling värden av samma typ. Men det finns flera viktiga skillnader. Elementen som lagras i en uppsättning är oordnade, och varje objekt kan bara visas en gång i en uppsättning.

Deklaration

Att arbeta med uppsättningar är lite annorlunda än att arbeta med arrays. Ta en titt på nästa exempel där vi förklarar tre uppsättningar. De set1 variabeln är av typen Uppsättning, en uppsättning som bara kan innehålla värden av typen Sträng.

var set1: Set var set2 = Ställ in() var set3: Set = ["Apple", "Pear", "Orange"]

De set2 variabeln är en tom uppsättning, och vi använder en array bokstavlig i det tredje exemplet för att skapa och fylla i en mutabel uppsättning som innehåller tre värden. Tack vare Swifts typinferens kan vi släppa ut typen av uppsättningen.

var set3: Set = ["Apple", "Pear", "Orange"]

Manipulera uppsättningar

Att arbeta med uppsättningar liknar att arbeta med arrays. Vi kan fråga om antalet element som lagras i en uppsättning genom att inspektera setets räkna fast egendom.

set3.count

Att sätta in ett element är enkelt. Eftersom elementen i en uppsättning är oordnade behöver vi inte ange platsen för det nya elementet.

set3.insert ( "Prune")

Och detsamma gäller att ta bort ett element från en uppsättning.

set3.remove ( "Orange")

Du kan också fråga en uppsättning om den innehåller ett visst element.

set3.contains ( "Apple")

Arrays eller uppsättningar

Jag hänvisar ofta till uppsättningar som lätta versioner av arrays. Om ordningen av elementen inte är viktig eller du vill försäkra dig om att varje element bara kan visas en gång i en samling, så är uppsättningar vägen att gå.

4. Tuples

Du kommer att älska tuples. Tuples är inte samlingar, men som samlingar, grupperar de också flera värden. Liksom arrays och ordböcker kan tuples innehålla värden av vilken typ som helst. Huvudskillnaden är dock att värdena som lagras i en tuple inte behöver vara av samma typ. Låt oss titta på ett exempel för att förklara detta mer i detalj.

importfonden var currency = ("EUR", 0.81) var time = (Datum (), "Detta är mitt meddelande.") Var email = ("Bart Jacobs", "[email protected]")

Det första exemplet deklarerar en tupel som heter valuta det är av typ (String, Int). Den andra tupeln, tid, innehåller a Datum exempel och en sträng bokstavlig. Värdena lagrade i e-post är båda av typen Sträng, som betyder e-post är av typ (Sträng, sträng).

Åtkomst till värden

index

För att få tillgång till ett värde som är lagrat i en tupel använder du indexet som motsvarar det värde du är intresserad av.

var rate = currency.1 var message = time.1 var name = email.0

Xcode visar oss indexerna för varje värde som lagras i en tupel i resultatrutan på lekplatsen till höger.

namn

För att förbättra läsbarheten kan du namnge värdena som är lagrade i en tupel. Resultatet är att du kan komma åt värdena på tupeln genom deras namn istället för deras index. Deklarera en tuple är något annorlunda i det fallet.

var currency = (namn: "EUR", betygsätt: 0.81) låt currencyName = currency.name låt currencyRate = currency.rate

Sönderfall

Det finns en andra, mer elegant sätt att arbeta med värdena som lagras i en tupel. Ta en titt på följande exempel där vi sönderdelar innehållet i valuta.

låt (currencyName, currencyRate) = valuta

Värdet av valuta på index 0 lagras i CurrencyName, och värdet vid indexet 1 lagras i växlingskurs. Det finns inget behov av att ange typen för CurrencyName och växlingskurs eftersom Swift infekterar typen från de värden som lagras i valuta. Med andra ord, CurrencyName är av typ Sträng, och växlingskurs är av typ Flyta.

Om du bara är intresserad av specifika värden på en tuple kan du använda ett understreck för att berätta för Swift vilka värden du inte är intresserad av.

låt (currencyName, _) = valuta

Slutsats

Arrays och ordböcker är grundläggande komponenter i nästan alla programmeringsspråk, och Swift är inte annorlunda. Medan samlingar beter sig lite annorlunda i Swift, tar det inte lång tid att bli bekant med Swifts samlingstyper om du har arbetat med arrays och ordböcker på andra programmeringsspråk. I nästa handledning undersöker vi alternativ och kontrollflöde.

Lär dig Swift

Vi har byggt en komplett guide för att hjälpa dig att lära dig Swift, oavsett om du bara har börjat med grunderna eller vill utforska mer avancerade ämnen.

Om du vill komma igång med snabbt språk snabbt, kolla in vår kurs om att skapa iOS-appar med Swift.

Eller kolla in några av våra andra handledning och kurser om Swift och iOS utveckling!