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]
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ă!
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 Alex is the iOS & Mac developer’s ultimate AI assistant. It integrates with Xcode, offering a best-in-class Swift coding agent. Generate modern SwiftUI from images. Fast-apply suggestions from Claude 3.5 Sonnet, o3-mini, and DeepSeek R1. Autofix Swift 6 errors and warnings. And so much more. Start your 7-day free trial today!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.