我有一个场景,我在 Swift中有一个简单的数据对象,包含多个属性变量.它们是String的混合体?和双倍?价值类型.我正在尝试使用valueForKey检索每个属性的值.我的代码看起来像这样…… l
let myDataObj = ... let stringKeyName = "myStringProperty" let doubleKeyName = "myDoubleProperty" guard let stringPropertyValue = myDataObj.valueForKey(stringKeyName) else { return } guard let doublePropertyValue = myDataObj.valueForKey(doubleKeyName) else { return }
获取stringPropertyValue的第一次调用工作正常,我能够按预期检索该值.但是,检索doublePropertyValue的第二次调用失败,并出现例外情况,“此类不是键值myDoubleProperty的键值编码.”
我知道属性名称是正确的,我也知道为此属性设置了一个值.为什么valueForKey适用于String对象,而不适用于Double对象?
正确的是,您只能对可以在Objective-C中表示的类型进行键值编码.不幸的是,在Objective-C中表示为原始数据类型的那些类型(例如,Swift的Int和Double分别表示为NSInteger和Objective-C中的双重)如果它们是可选项,则不能这样表示.在Objective-C中,选项只对类类型有意义,而不是基本数据类型.