2017-04-17 100 views
1

我試圖找出一種方法來動態地設置/獲取類實例的屬性。動態獲取實例屬性Swift 3

用戶等級:

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

我正在嘗試設置/獲取屬性是這樣的,(我知道.send()不存在,但我試圖找到類似的東西,如果有可能)

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

回答

2

這是Key-Value Coding

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

使用此卡帕的希望基於非NSObject類型的可移植性? –

+0

太棒了,完美無缺! – danielavila

+1

@PauloMattos不,這需要objc運行時。但是,請參閱https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md您幾乎肯定不會將字符串傳遞給非Cocoa Swift(按設計;這是非常不安全的;至少在我們進行反思之前,但即使如此,情況也會非常不同)。但我們將能夠間接引用屬性。今天你通常會使用閉包來解決這些問題。 –