UPGRADE YOUR SKILLS: Learn advanced Swift and SwiftUI on Hacking with Swift+! >>

Proprietăți

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.

Observatori ai proprietăților

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

Proprietăți calculate

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.

Get it on Hacking with Swift+

Sponsor Hacking with Swift and reach the world's largest Swift community!

BUY OUR BOOKS
Buy Pro Swift Buy Pro SwiftUI Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.