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
}
BUILD THE ULTIMATE PORTFOLIO APP Most Swift tutorials help you solve one specific problem, but in my Ultimate Portfolio App series I show you how to get all the best practices into a single app: architecture, testing, performance, accessibility, localization, project organization, and so much more, all while building a SwiftUI app that works on iOS, macOS and watchOS.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.