Swift From Scratch Colecții și cătușe

În articolul precedent, ați aflat despre variabile, constante și unele dintre tipurile de date comune, cum ar fi numere întregi, flotoare și șiruri de caractere. În acest articol, mărim colecțiile. Biblioteca standard Swift definește trei tipuri de colecții: seturi, matrice și dicționare. Să începem cu matrice.

1. Arrays

Dacă sunteți familiarizat cu obiectivele C, JavaScript sau PHP, atunci nu va fi dificil să înțelegeți tablourile. O matrice este o colecție de valori ordonată, indexată la zero. Dar există câteva diferențe importante între matricele pentru Swift și alte limbi de programare.

Tip

Prima diferență importantă față de matricele din Obiectiv-C este că valorile stocate într-o matrice sunt întotdeauna de același tip. La început, aceasta poate părea o limitare semnificativă, dar de fapt nu este. De fapt, această limitare are un avantaj important. Știm cu exactitate ce tip primim înapoi atunci când cerem matricea pentru una dintre valorile sale.

O altă diferență cheie este tipul de valori pe care o matrice le poate stoca. În Obiectiv-C, o matrice poate stoca numai valori ale unui tip de clasă. Swift nu are această limitare. O matrice din Swift poate stoca șiruri, numere întregi, flotoare și instanțe de clasă. Cum funcționează acest lucru și de ce acest lucru este posibil în Swift va deveni clar mai târziu în această serie când acoperim clasele și structurile.

Declaraţie

Deși există mai multe moduri de a crea o matrice, trebuie să țineți cont de faptul că Swift trebuie să știe ce tip de valori doriți să stocați în matrice. Creați un nou loc de joacă în Xcode, așa cum am făcut în articolul precedent, și adăugați următoarele linii la locul de joacă.

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

Primele și al doilea linii înseamnă același lucru. A doua linie este doar o prescurtare. Parantezele pătrate care înfășoară Şir cuvântul cheie spune lui Swift că declarăm o matrice care poate conține numai Şir obiecte.

Ați putea citi prima linie de cod ca: "Vom declara o variabilă numită matrice1 de tip mulțime care pot conține numai Şir obiecte. "Colonul semnifică de tip.

Cea de-a treia linie ne arată cum să inițializăm o matrice utilizând o matrice literală. Arhiva literală pare foarte asemănătoare cu literalul matricei din Obiectiv-C. Principala diferență este lipsa @ simbol care precede parantezele pătrate și literele de coarde.

Există, de asemenea, un mod fantezist de a inițializa o matrice cu un număr predefinit de valori implicite. Sintaxa poate fi confuză la început, dar trebuie să faceți o clipă pentru ao lăsa să se scufunde.

var a = [String] (repetat: "Test", număr: 5)

Matricea rezultată conține cinci șiruri, fiecare șir fiind egal cu "Test". Pentru a înțelege mai bine inițializarea de mai sus, aruncăm o privire la următoarele două linii de cod în care inițializăm o matrice goală de șiruri de caractere.

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

Nu vă faceți griji dacă sunteți în continuare confuz. Vom explora mai detaliat sintaxa după ce vom începe să ne ocupăm de clase și funcții. În acest articol, ne concentrăm doar pe colecții.

Mutabilitate

Un aspect al lui Swift pe care îl veți aprecia repede este cum să declarați colecții mutabile. Fragmentul de cod de mai sus, de exemplu, declară trei matrice mutabile. O matrice mutabilă este definită folosind var cuvinte cheie. Este atat de simplu.

Dacă nu doriți ca matricea să fie mutabilă, utilizați lăsa cuvânt cheie în loc. Swift își propune să fie intuitivă și ușor de folosit, iar implementarea ei de mutabilitate este un exemplu perfect al acestui scop.

Obținerea și stabilirea valorilor

Pentru a accesa valorile stocate într-o matrice, folosim aceeași sintaxă a subscriptului ca în Obiectiv-C. În exemplul următor, întrebăm array3 pentru al doilea element, șirul "Pară".

array3 [1]

Înlocuirea valorii stocate la index 1 este la fel de simplu ca atribuirea unei noi valori folosind aceeași sintaxă a subscriptului. În următorul exemplu, înlocuim "Pară" la index 1 cu "Piersică".

array3 [1] = "Piersic"

Acest lucru este posibil numai pentru că matricea este mutabilă, adică am folosit var cuvânt cheie pentru a declara matricea. Mutarea unei matrice constante nu este posibilă. Există mai multe tehnici avansate de manipulare a conținutului unei matrice, dar conceptul subiacent este același.

Îmbinarea a două matrice este la fel de simplă ca adăugarea lor împreună. În exemplul următor, declarăm și fuzăm două matrice imuabile. Rețineți că matricea rezultată, c, nu trebuie să fie mutable pentru ca aceasta să funcționeze.

Fie a = [1, 2, 3] b = [4, 5, 6] permite c = a + b

Cu toate acestea, este esențial ca valorile stocate în A și b sunt de același tip. Motivul ar trebui să fie evident până acum. După cum am menționat mai devreme, valorile stocate într-o matrice trebuie să fie de același tip. Următorul exemplu are drept rezultat o eroare.

Fie a = [1, 2, 3] let b = [1,5, 5,2, 6,3] permite c = a + b

Pentru a adăuga o matrice la o matrice mutable, folosim += operator. Rețineți că operandul din partea dreaptă este un matrice. Această operație nu ar funcționa dacă am elimina parantezele pătrate din jur 4.

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

Operațiuni

Arrays sunt obiecte pe care puteți efectua o gamă largă de operațiuni. Arrays expune o serie de funcții sau metode. Pentru a invoca o metodă pe un obiect, utilizați notația punctului. Adăugați următoarea linie la locul de joacă pentru a adăuga un element la array3.

array3.append ( "Cherry")

Să vedem câte elemente array3 conține prin inspectarea valorii sale numara proprietate. Aceste ieșiri 4 în panoul de rezultate.

array3.count

De asemenea, este posibil să inserați un element la un anumit index invocând matricea se introduce (_: la :) așa cum se arată mai jos. se introduce (_: la :) metoda acceptă mai mult de un parametru, iar sintaxa poate părea un pic ciudat la început.

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

Ca și Obiectiv-C, Swift acceptă parametrii numiți pentru a îmbunătăți lizibilitatea. Rezultatul este că acest cod este mai ușor de citit și de înțeles, iar funcțiile sau metodele nu necesită mult explicații în ceea ce privește ceea ce fac. Este clar, de exemplu, că se introduce (_: la :) metoda introduce un element la index 2.

În timp ce Swift este mai concis și mai puțin verbose decât Obiectiv-C, acesta susține parametrii numiți. Dacă veniți din PHP, Ruby, sau JavaScript, atunci acesta este cu siguranță un lucru care ia ceva obișnuit.

Metode convenționale

Ceea ce îmi place cu adevărat despre Swift sunt proprietățile convenabile precum și metodele convenabile ale bibliotecii standard Swift. O matrice, de exemplu, are un este gol proprietate care vă spune dacă matricea conține elemente. Nu e nimic mai mult decât o stenogramă pentru verificarea matricei numara proprietate. Rezultatul, cu toate acestea, este un cod mai concis și mai ușor de citit.

array3.isEmpty

2. Dicționare

Dicționarele se comportă foarte asemănător cu dicționarele din Obiectiv-C. Un dicționar conține o colecție neordonată de valori. Fiecare valoare din dicționar este asociată cu o cheie. Cu alte cuvinte, un dicționar stochează un număr de perechi cheie / valoare.

Tip

Ca și în cazul matricelor, cheile și valorile stocate într-un dicționar trebuie să fie de același tip. Aceasta înseamnă că, dacă întrebați un dicționar pentru valoarea unei anumite taste, știți ce tip de dicționar va reveni.

Declaraţie

Declararea unui dicționar este similară cu declararea unui matrice. Diferența este că trebuie să specificați tipul pentru ambele chei și valori. Următorul exemplu prezintă trei moduri de a declara un dicționar.

var dic1: Dicționar var dic2: [String: Int] var dicționar3 = ["Apple": 3, "Pear": 8, "Orange": 11]

A doua linie este o stenogramă pentru prima linie. Cheile acestor dicționare trebuie să fie de tip Şir în timp ce se așteaptă ca valorile să fie de tip Int. var cuvântul cheie indică faptul că dicționarele sunt mutabile.

Ați putea citi prima linie de cod ca: "Vom declara o variabilă numită dictionary1 de tip Dicţionar care pot conține numai chei de tip Şir și valorile tipului Int."

A treia linie ilustrează modul în care putem iniția un dicționar folosind un dicționar literal. Acest lucru este similar cu sintaxa pe care o folosim în Obiectiv-C, dar rețineți că bretelele curbate sunt înlocuite cu paranteze pătrate, iar literalul nu este prefixat cu @ simbol.

Obținerea și stabilirea valorilor

Accesarea valorilor este similară cu accesarea valorilor unui tablou. Singura diferență este că utilizați cheia în locul indexului valorii pe care trebuie să o accesați. Următorul exemplu ilustrează acest lucru.

lasă valoarea = dicționar3 ["Apple"] print (valoare)

Veți observa că Xcode ne spune că valoarea lui valoare nu este 3, dar Opțional (3). Ce inseamna asta? Swift folosește opțiunile pentru a încorpora valori care pot fi unul din două lucruri, o valoare sau zero. Nu vă faceți griji în legătură cu opțiunile în acest moment. Vom concentra asupra opțiunilor în următorul articol din această serie. Permiteți-mi să vă spun că opțiunile sunt un alt concept-cheie al limbajului de programare Swift.

Este interesant să subliniem că sintaxa pentru a accesa o valoare a unui dicționar este identică cu cea a matricelor dacă cheile dicționarului sunt de tip Int. Uitați-vă la următorul exemplu pentru a vedea ce vreau să spun.

Var dicționar4 = [0: "Apple", 1: "Pear", 2: "Orange"

Operațiuni

Ca și în cazul matricelor, biblioteca standard Swift definește o gamă largă de operații pe care le puteți efectua în dicționare. Puteți solicita un dicționar pentru numărul de perechi cheie / valoare prin intermediul acestuia numara proprietate. Eliminarea unei perechi cheie / valoare este ușor și intuitivă, după cum ilustrează exemplul următor. Desigur, acest lucru este posibil numai dacă dicționarul este mutabil.

dictionary4.removeValue (pentruKey: 0)

Când începeți să învățați Swift, veți putea rula fragmente de cod care arată ciudat sau confuz. Aruncați o privire la următoarea linie, în care mai întâi declarăm un dicționar și apoi eliminăm perechile cheie / valoare.

var dicționar = dicționar [String: Int] () ["Portocale"] = 2 dicționar ["Mere"] = 10 dicționar [Pears] = 5 dicționar =

Trebuie să recunoști că ultima linie pare ciudată. Deoarece Swift cunoaște tipurile de chei și valori care pot fi stocate în dicţionar, golirea dicționarului este la fel de simplă ca și atribuirea unui dicționar gol.

Nu este nevoie să specificăm tipurile pentru chei și valori în acest caz, deoarece am făcut deja când am declarat dicționarul în prima linie. Acest lucru evidențiază un alt detaliu important, adică tipul de valori pe care le puteți stoca în matrice și dicționare nu se poate schimba odată ce colecția este declarată.

3. Seturi

Seturile sunt foarte asemănătoare cu matricele prin faptul că stochează o colecție de valori de același tip. Dar există câteva diferențe importante. Elementele stocate într-un set sunt neordonate și fiecare element poate apărea doar o singură dată într-un set.

Declaraţie

Lucrul cu seturi este un pic diferit de lucrul cu matrice. Uitați-vă la următoarele exemple în care vom declara trei seturi. set1 variabila este de tip A stabilit, un set care poate conține numai valori de tip Şir.

var set1: Setați var set2 = Setare() var set3: Setare = ["Apple", "Pear", "Orange"]

 SET2 variabila este un set gol și folosim un literal matrice în al treilea exemplu pentru a crea și a popula un set mutable care conține trei valori. Datorită inferenței de tip Swift, putem să omitem tipul setului.

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

Seturi de manipulare

Lucrul cu seturi este similar cu lucrul cu matrice. Putem cere numărul de elemente stocate într-un set, prin inspectarea seturilor numara proprietate.

set3.count

Introducerea unui element este ușoară. Deoarece elementele unui set sunt neordonate, nu este necesar să specificăm locația elementului nou.

set3.insert ( "Prune")

Și același lucru se aplică și la eliminarea unui element dintr-un set.

set3.remove ( "Orange")

De asemenea, puteți să întrebați un set dacă acesta conține un element particular.

set3.contains ( "Apple")

Arrays sau Seturi

Eu mă refer adesea la seturi ca versiuni ușoare ale array-urilor. Dacă ordinea elementelor nu este importantă sau doriți să vă asigurați că fiecare element poate apărea doar o singură dată într-o colecție, atunci seturile sunt calea de urmat.

4. Tups

Veți iubi tuplurile. Tupele nu sunt colecții, ci colecții, de asemenea, grupează mai multe valori. Similar cu array-urile și dicționarele, tuplurile pot conține valori de orice tip. Diferența cheie este totuși că valorile stocate într-o tuplă nu trebuie să fie de același tip. Să examinăm un exemplu pentru a explica acest lucru în detaliu.

importul val var = = ("EUR", 0.81) var time = (Data (), "Acesta este mesajul meu") var email = ("Bart Jacobs", "[email protected]")

Primul exemplu declară o tuplă numită valută care este de tip (String, Int). Cea de-a doua trupă, timp, conține a Data instanță și un literal șir. Valorile stocate în e-mail sunt ambele de tip Şir, care înseamnă e-mail este de tip (String, String).

Accesarea valorilor

Indici ai

Pentru a accesa o valoare stocată într-o tuplă, utilizați indexul care corespunde valorii care vă interesează.

var rate = valută.1 var mesaj = time.1 var name = email.0

Xcode ne arată indicele fiecărei valori stocate într-o tuplă în panoul de rezultate al locului de joacă din dreapta.

Nume

Pentru a îmbunătăți lizibilitatea, puteți numi valorile stocate într-o tuplă. Rezultatul este că puteți accesa valorile tuplei prin numele lor în locul indexurilor lor. Declararea unei tuple este puțin diferită în acest caz.

var currency = (nume: "EUR", rata: 0.81) let currencyName = currency.name let currencyRate = currency.rate

Descompunere

Există un al doilea mod mai elegant de a lucra cu valorile stocate într-o tuplă. Uitați-vă la următorul exemplu în care descompunem conținutul valută.

permiteți (currencyName, currencyRate) = valută

Valoarea a valută la index 0 este stocat în currencyName, și valoarea la index 1 este stocat în rata de schimb. Nu este nevoie să specificați tipul pentru currencyName și rata de schimb deoarece Swift convertește tipul de la valorile stocate în valută. Cu alte cuvinte, currencyName este de tip Şir, și rata de schimb este de tip Pluti.

Dacă sunteți interesat doar de anumite valori ale unei tuple, puteți utiliza un subliniere pentru a le spune Swift valorile pe care nu le interesați.

permiteți (currencyName, _) = valută

Concluzie

Arrays și dicționare sunt componente fundamentale ale aproape tuturor limbajelor de programare, iar Swift nu este diferit. În timp ce colecțiile se comportă puțin diferit în Swift, nu este nevoie de mult timp să vă familiarizați cu tipurile de colecții Swift dacă ați lucrat cu matrice și dicționare în alte limbi de programare. În tutorialul următor, explorăm opțiunile și fluxul de control.

Aflați Swift

Am construit un ghid complet pentru a vă ajuta să învățați Swift, indiferent dacă începeți doar cu elementele de bază sau doriți să explorați subiecte mai avansate.

Dacă doriți să vă grăbiți rapid cu limbajul Swift, verificați cursul de creare a aplicațiilor iOS cu Swift.

Sau verificați câteva dintre celelalte tutoriale și cursuri de curs despre dezvoltarea Swift și iOS!

Cod