SALE ENDS TODAY: Save 50% on all Swift books and bundles! >>

Array-uri

Array-urile te lasă să grupezi mai multe valori în o singură colecție, apoi să le accesezi prin poziția lor în colecție. Swift folosește type inference (inferarea tipului de date) ca să își dea seama ce tip de dată conține array-ul tău, ca mai jos:

var evenNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]

După cum vezi, Swift folosește paranteze pătrate ca să delimiteze începutul și sfârșitul array-ului, și fiecare element din array este separat de o virgulă.

Când vine vorba de a citi elemente din array, aveți grijă: Swift începe numărătoarea de la 0. Asta înseamnă că primul element este 0, al doilea 1, al treilea 2 ș.a.m.d. Încearcă să scrii asta în playground:

var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0] 
songs[1]
songs[2]

Asta va scrie "Shake it Off", "You Belong with Me", și "Back to December" în panoul de rezultate.

Poziția unui element în array este numită indexul elementului respectiv, și poți să citești orice element din array prin a-i da indexul. Totuși, trebuie să ai grijă: array-ul nostru are trei elemente înăuntru, ceea ce înseamnă că indexurile 0, 1 și 2 vor funcționa fără probleme. Dar dacă încerci să citești songs[3], playground-ul se va opri din funcționare – iar dacă ai încerca asta într-o aplicație reală, ți-ar da crash.

Pentru că ai creat array-ul tău prin a-i da trei string-uri, Swift știe că este un array de string-uri. Poți să îți confirmi asta prin a folosi o comandă specială în playground, care va scrie tipul de dată al oricărei variabile, precum:

var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
type(of: songs)

Asta va scrie Array<String>.Type în panoul de rezultate, spunându-ți că Swift consideră songs ca fiind un array de string-uri.

Să zicem că ai făcut o greșeală și ai pus un număr la finalul array-ului. Încearcă să scrii asta și observă ce se întâmplă în panoul de rezultate:

var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
type(of: songs)

De data asta vei vedea o eroare. Eroarea nu se datorează faptului că Swift nu știe să trateze array-uri mixte precum aceasta - îți voi arăta imediat cum să faci asta! - ci pentru că Swift încearcă să te ajute. Mesajul de eroare pe care îl vezi este “heterogenous collection literal could only be inferred to '[Any]'; add explicit type annotation if this is intentional.” Sau, în română, “se pare că acest array se vrea a conține mai multe tipuri de date - dacă chiar vrei asta, spune-i în mod explicit.”

Siguranța tipurilor de dată (type safety) este importantă, și deși este benefic că Swift poate să facă array-urile să conțină orice fel de tip de date, în cazul nostru e o greșeala. Din fericire, am zis deja că putem folosi adnotări de tip de date pentru a specifica exact ce tip de dată vrem ca array-ul nostru să conțină. Pentru a specifica tipul unui array, scrie tipul de dată pe care vrei ca array-ul să îl stocheze, ca mai jos:

var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]

Acum că i-am spus lui Swift că vrem să conțină doar string-uri, o să refuze mereu să ruleze codul deoarece 3 nu este un string.

Dacă vrei ca array-ul tău să conțină orice tip de date, folosește tipul de dată special Any:

var songs: [Any] = ["Shake it Off", "You Belong with Me", "Back to December", 3]

Crearea de array-uri

Dacă creezi un array folosind sintaxa de mai sus, Swift creează array-ul și îl populează cu valorile pe care noi le-am specificat. Lucrurile nu sunt atât de ușoare când vrei să creezi un array pe care vrei să îl populezi mai târziu - sintaxa de mai jos nu va merge:

var songs: [String]
songs[0] = "Shake it Off"

Motivul pentru care nu merge este unul care va părea pedantic la început, dar datorită complicatelor implicări de performanță trebuie să îl acceptăm. A scrie var songs: [String] îi spune lui Swift că "variabila songs va conține un array de string-uri" dar nu și creează acel array. Nu alocă niciun RAM, nici nu face vreunul din lucrurile care creează un array. Doar îi spune că la un moment dat o să fie un array, și va conține string-uri.

Sunt câteva moduri prin care putem face asta corect, și cel care are probabil cel mai mult sens este următorul:

var songs: [String] = []

Folosim adnotările de tip pentru a ne face clară intenția de a vrea să avem un array de string-uri, și creează un array gol automat (partea cu []).

O să mai vezi și următoarea sintaxă:

var songs = [String]()

Asta face același lucru ca mai sus, () îi spune lui Swift să creeze array-ul pe care îl vrem și apoi îl atribuie variabilei songs, folosind type inference. Această opțiune este cu două caractere mai scurtă, așa că nu este de mirare că programatorii o preferă!

Operatorii de array

Poți folosi un set limitat de operatori pe array-uri. De exemplu, poți combina două array-uri folosind operatorul +, precum:

var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "Welcome to New York", "Fifteen"]
var both = songs + songs2

Sau poți folosi += pentru a adăuga și atribui:

both += ["Everything has Changed"]

SPONSORED Instabug helps you identify and resolve severe crashes quickly. You can retrace in-app events and know exactly which line of code caused the crash along with environment details, network logs, repro steps, and the session profiler. Ask more questions or keep users up-to-date with in-app replies straight from your dashboard. Instabug takes data privacy seriously, so no one sees your data but you! See more detailed features comparison and try Instabug's crash reporting SDK for free.

Save 50% on all books and bundles

The biggest ever Hacking with Swift sale is now on, letting you save 50% on all books and bundles. Learn something new with Swift and enjoy great savings while the sale lasts!

Click here to save 50% in our Black Friday sale!

BUY OUR BOOKS
Buy Pro Swift Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift (Vapor Edition) Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Server-Side Swift (Kitura Edition) Buy Beyond Code

Was this page useful? Let us know!