NEW: Get your ticket for Hacking with Swift Live 2019! >>

< Previous: String interpolation   Next: Dicționarele >

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

HACKING WITH SWIFT LIVE This July is a new two-day event where you'll be inspired by great speakers on day one then learn all the amazing new features from WWDC on day two – click here for more information and tickets.

< Previous: String interpolation   Next: Dicționarele >
MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let me know!

Click here to visit the Hacking with Swift store >>