我有對象是這樣的:iOS Swift 3.1中的setValue和myObject.propertyName有什麼區別?
class Human: NSObject {
var name:String!
var age:Int!
}
而且使實例從對象是這樣的:
let instance = Human()
並設置我的價值觀是這樣的:
instance.name = "Kirk"
instance.age = 87
,並打印這樣的:
print("name: \(instance.name)") // Kirk
print("age: \(instance.age)") //87
每件事情都可以。但現在把我的價值的另一種方式是這樣的:
instance.setValue("Kirk", forKey: "name")
instance.setValue(87, forKey: "age")
得到這個錯誤詮釋數據類型:
***終止應用程序由於未捕獲的異常 'NSUnknownKeyException',原因:「[setValue方法:forUndefinedKey:]:這個 類不是關鍵字值,它是關鍵時代的編碼標準。
爲什麼會發生這種情況?
以及如何解決這個問題,因爲我需要使用setValue()函數。
區別在於'instance.name'通過本機Swift機制訪問屬性,而'instance.setValue(「Kirk」,forKey:「name」)'需要鍵值編碼KVC),它只有在類型可以在Objective-C中表示時纔有效。正如其他人指出的那樣,「Int!」不能用Objective-C表示,所以它不能參與KVC。將'age'從'Int!'更改爲'Int'或'NSNumber!',它會正常工作。 (顯然,如果將其更改爲'Int',則需要確保將其初始化爲非'nil'值,推測採用'init'方法將該值作爲參數。) – Rob
可能重複[Why我可以不使用KVC從Objective-C對象到Swift屬性嗎?](http://stackoverflow.com/questions/35783888/why-can-i-not-use-kvc-from-an-objective-c- object-to-a-swift-property) –