2017-03-07 1 views
0

Ich möchte eine Funktion schreiben, die eine Zeichenfolge verwendet und anschließend den Wert der Klasseneigenschaft mit diesem Namen ausgibt. In der Praxis würde mehr als eine Eigenschaft zur Auswahl stehen. Zum Beispiel ...Verwenden eines Zeichenfolgenparameters zum Beschreiben der Klasseneigenschaft

class Apple{ 
    var juiciness : Int = 0 
    init(juiciness: Int){ 
    self.juiciness = juiciness 
    } 
} 

var myApple(juiciness : 10) 

func printValue(property : String){ 
    print(Apple.property) // <-- I want to use the string to choose a property 
} 

Offensichtlich kann ich diesen Code nicht tun, aber ich weiß, dass es eine bessere Lösung als nur ich Reihe von if-Anweisungen sein muss.

+0

http://stackoverflow.com/questions/24138705/access-properties-via -subscripting-in-swift – chengsam

+0

Wollen Sie * wirklich * einen String nehmen? Dies wäre bei einer Schließung viel besser umzusetzen. – Hamish

+0

Für zukünftige Referenz wird diese Art von Funktionalität "Reflektion" genannt. – Alexander

Antwort

1

Apple hat dies für Sie getan. Es ist bekannt als Key-Value-Beobachtung (KVO). Versuchen Sie den folgenden Code auf dem Spielplatz:

let label = UILabel() 
print(label.value(forKey: "font")) 

Ihre eigene Klasse kann KVO unterstützen, indem sie von NSObject erbt:

class YourClass: NSObject{ ... } 
+0

Kann ich NSObject als NSManagedObject erben? – spogatetz

+1

@spogatetz NSManagedObject ist eine Unterklasse von NSObject. Sie können einfach von NSManagedObject erben. – LinShiwei

+0

Das macht Sinn, danke. – spogatetz

Verwandte Themen