我在符合NSKeyValueCoding的Swift NSObject子类中成功使用了setValue(value, forKey: key)
方法。在Int上使用setValue(value,forKey:key)类型触发非关键值编码兼容方法
这对字符串选项非常适用,例如,
var name:String?
然而,在诠释自选,失败,引发我已经覆盖了调试的目的未定义的关键方法:
override func setValue(value: AnyObject!, forUndefinedKey key: String!) {
println("\(self) this class is not key value coding-compliant for the key \(key)")
}
所以例如,myId
具有良好的整数值的键会触发上面未定义的密钥方法。
var myId:Int?
如果我改变上述定义为非可选,然后一切工作正常:
var myId:Int = 0
随着myId
作为一个可选的,我已经试过绝对一切,我可以在路上想到的铸造,解包,初始化等等。它只是没有看到这个类作为这些数字值的关键值。
我知道这是一个很好的数值。将var声明更改为String?崩溃。它也看起来很好的LLDB:
Printing description of key:
myId
key NSObject 0x00007fb8d530ca20 0x00007fb8d530ca20
k NSString "myId" 0x00007fa2aa942f20
value __NSCFNumber * Int64(4348129) 0xb000000004258e13
Printing description of value:
4348129
(lldb)
所以,问题是,已经没有人使用 - 斯威夫特 - 该方法的NSKeyValueCoding setValue(value, forKey: key)
上int类型成功?
难道这是因为int是任何类型,而不是AnyObject的。我试图解析一个对象到字典并返回,并有类似的问题。请参阅https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVReflection.swift您可以看到我尝试将Any解析为AnyObject。可空值仍然是一个问题,但它在Int上起作用。 – 2014-09-30 22:13:32