NEW: Join my free 100 Days of SwiftUI challenge today! >>

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
}

SPONSORED Instabug helps you identify and resolve severe crashes quickly. You can retrace in-app events and know exactly which line of code caused the crash along with environment details, network logs, repro steps, and the session profiler. Ask more questions or keep users up-to-date with in-app replies straight from your dashboard. Instabug takes data privacy seriously, so no one sees your data but you! See more detailed features comparison and try Instabug's crash reporting SDK for free.

BUY OUR BOOKS
Buy Pro Swift 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 (Vapor Edition) 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 Server-Side Swift (Kitura Edition) Buy Beyond Code

Was this page useful? Let us know!