Structurile și clasele (colectiv numite: "tipuri") pot avea propriile variabile și constante, și acestea se numesc proprietăți. Ele îți permit să atașezi valori tipurilor tale pentru a le reprezenta în mod unic, dar pentru că tipurile pot avea de asemenea metode poți să le faci să se comporte în concordanță cu propriile lor date.
Let's take a look at an example now:
struct Person {
var clothes: String
var shoes: String
func describe() {
print("I like wearing \(clothes) with \(shoes)")
}
}
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
taylor.describe()
other.describe()
După cum poți vedea, când folosești o proprietate în interiorul unei metode va folosi automat valoarea care aparține aceluiași obiect.
Swift îți permite să adaugi cod care va rula atunci când o proprietate este pe cale să se modifice sau când a fost modificată. De multe ori aceasta este o bună modalitate de a actualiza o interfață atunci când o valoare se modifică, de exemplu:
Există două tipuri de observatori ai proprietăților: willSet
și didSet
, și ei sunt apelați înainte sau după ce proprietatea se modifică. În willSet
Swift îți oferă o valoare specială numită newValue
care conține noua valoare pe care proprietatea o va avea, și în didSet
îți este oferită oldValue
pentru a prezenta valoarea precedentă.
Haide să adăugăm doi observatori proprietății clothes
a structurii Person
:
struct Person {
var clothes: String {
willSet {
updateUI(msg: "I'm changing from \(clothes) to \(newValue)")
}
didSet {
updateUI(msg: "I just changed from \(oldValue) to \(clothes)")
}
}
}
func updateUI(msg: String) {
print(msg)
}
var taylor = Person(clothes: "T-shirts")
taylor.clothes = "short skirts"
Va fi printat mesajul "I'm changing from T-shirts to short skirts" și "I just changed from T-shirts to short skirts."
Este posibil să creezi proprietăți care sunt defapt cod în spate. Am folosit deja metoda uppercased()
a stringurilor, de exemplu, dar există de asemenea o metodă numită capitalized
care este calculată când este nevoie, și nu este stocată pentru fiecare string în parte.
Pentru a crea o proprietate calculată, deschide o acoladă după proprietate apoi folosește get
sau set
pentru ca o acțiune să se petreacă la timpul potrivit. De exemplu, dacă vrem să adăugăm o proprietate ageInDogYears
care returnează automat vârsta persoanei înmuțită cu șapte, am putea face asta:
struct Person {
var age: Int
var ageInDogYears: Int {
get {
return age * 7
}
}
}
var fan = Person(age: 25)
print(fan.ageInDogYears)
Proprietățile calculate sunt din ce în ce mai folosite în codul Apple, dar mai puțin întâlnite în codul userilor.
Notă: Dacă intenționezi să le folosești doar pentru a citi date, poți pur și simplu să ștergi partea cu get
în totalitate, în felul acesta:
var ageInDogYears: Int {
return age * 7
}
SPONSORED Build a functional Twitter clone using APIs and SwiftUI with Stream's 7-part tutorial series. In just four days, learn how to create your own Twitter using Stream Chat, Algolia, 100ms, Mux, and RevenueCat.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.