Structurile sunt tipuri de date complexe, ceea ce înseamnă că sunt formate din mai multe valori. Tu creezi o instanță a unei structuri și îi completezi valorile, după care poți să o folosești în codul tău ca pe o singură valoare. De exemplu, am putea defini o structură Person
care conține două proprietăți: clothes
și shoes
:
struct Person {
var clothes: String
var shoes: String
}
Atunci când definești o structură, Swift face ca asta să fie foarte ușor de creat deoarece generează automat așa numiții inițializatori impliciți. Altfel spus, înseamnă că poți crea structuri prin adăugarea valorilor inițiale ale celor două proprietăți astfel:
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
De îndată ce ai creat instanța structurii, poți să îi accesezi membrii prin a scrie numele structurii, un punct, apoi proprietatea pe care vrei să o accesezi:
print(taylor.clothes)
print(other.shoes)
Dacă atribui o structură altei structuri, în spate Swift o copiază astfel încât este un duplicat complet, de sine stătător al originalului. Ei bine, nu este în totalitate adevărat: Swift folosește o tehnică numită "copiere la scriere" ceea ce înseamnă că va copia datele doar atunci când încerci să le modifici.
Pentru a te ajuta să întelegi cum funcționează copierea de structuri, scrie asta în playground:
struct Person {
var clothes: String
var shoes: String
}
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
var taylorCopy = taylor
taylorCopy.shoes = "flip flops"
print(taylor)
print(taylorCopy)
Se creează două structuri Person
, apoi o a treia structură numită taylorCopy
se creează ca și copie a lui taylor
. Ceea ce se întâmplă în continuare este interesant: structura taylorCopy
este modificată în cod, apoi este afișată împreună cu taylor
. Dacă te uiți în panoul cu rezultate (se poate să fie nevoie să-l redimensionezi) vei vedea că acea copie are o valoare diferită față de cea originală: modificând-o pe una nu se modifică și cealaltă.
Poți să ai funcții în interiorul structurilor, și de fapt este o idee bună să faci asta pentru toate funcțiile care citesc sau modifică date din interiorul structurii. De exemplu, am putea adăuga o funcție structurii noastre Person
pentru a descrie ce purtau, în felul acesta:
struct Person {
var clothes: String
var shoes: String
func describe() {
print("I like wearing \(clothes) with \(shoes)")
}
}
Mai este un lucru pe care trebuie să-l știi dar nu-l poți vedea în cod: Când scrii o funcție în interorul unei structuri, se numește metodă defapt. În Swift scrii func
indiferent dacă este o funcție sau o metodă, dar distincția se pastrează când vorbești despre ele.
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure and A/B test your entire paywall UI without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.