2017-04-17 3 views
1

Ich versuche, eine Möglichkeit zu finden, die Attribute einer Instanz einer Klasse dynamisch festzulegen/abzurufen.Instanzenattribute dynamisch abrufen Swift 3

Benutzerklasse:

class User: NSObject { 
    var email: String = "" 
    var password: String = "" 
} 

Ich versuche/get-Attribut so etwas wie diese, (ich weiß, dass .send() existiert nicht, aber ich versuche, so etwas zu finden, wenn es möglich ist)

var user = User() 
// Set 
user.send('email') = "[email protected]" 
// Get 
print(user.send('email')) 

Antwort

2

Dies ist Key-Value Coding:

user.setValue("[email protected]", forKey:"email") 
print(user.value(forKey:"email")) 
+0

Jede Hoffnung dieses capa der Verwendung auf Nicht-NSObject-basierten Typen? –

+0

Super, hat perfekt funktioniert! – danielavila

+1

@PauloMattos Nein, dies erfordert die Objc-Laufzeit. Wie auch immer, siehe https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md Sie werden wahrscheinlich nie auf diese Weise Zeichenfolgen an Nicht-Cocoa Swift übergeben können (per Entwurf) das ist furchtbar unsicher, zumindest bis wir darüber nachdenken, aber selbst dann wird es ganz anders sein. Aber wir können indirekt auf Eigenschaften verweisen. Heute würden Sie diese Probleme in der Regel mit Verschlüssen lösen. –