swift – 在Int上使用setValue(value,forKey:key)?类型触发非键值编码兼容方法

swift – 在Int上使用setValue(value,forKey:key)?类型触发非键值编码兼容方法,第1张

概述我正在使用符合NSKeyValueCoding的Swift NSObject子类中的setValue(value,forKey:key)方法。 这对String可选项非常有效,例如 var name:String? 但是,在Int可选项上,它失败,触发我已经为了调试目的而被覆盖的未定义的关键方法: override func setValue(value: AnyObject!, forUndef 我正在使用符合NSkeyvalueCoding的Swift NSObject子类中的setValue(value,forKey:key)方法。

这对String可选项非常有效,例如

var name:String?

但是,在Int可选项上,它失败,触发我已经为了调试目的而被覆盖的未定义的关键方法:

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:myIDkey NSObject    0x00007fb8d530ca20  0x00007fb8d530ca20k   Nsstring    "myID"  0x00007fa2aa942f20value   __NSCFNumber *  Int64(4348129)  0xb000000004258e13Printing description of value:4348129(lldb)

所以,问题是,有没有人在Swift中使用NSkeyvalueCoding方法setValue(value,forKey:key)在Int类型上成功?

KVO无法使用纯Swift可选功能,因为纯Swift可选项不是Objective-C对象。 Swift禁止使用动态或@objc与通用类和结构,因为没有有效的Objective-C等效,因此运行时没有设置为在这些对象的实例上支持KVO。至于为什么它与String ?,它的类型是免费桥接到Nsstring,所以它在语义上等同于Nsstring *,一个Objective-C类型,运行时知道如何处理。但是要比较一下Int?其语义等价物将是可选的< Int>,而不是UnsafePointer< Int>或NSNumber *,你可能会期望。现在,您需要说服类型检查程序,可以通过使用NSNumber!来代替Objective-C。

这是完全倒退的,在我看来,类型系统是一个不幸的限制。对于遇到此帖子的任何工程师,请参阅rdar:// 18624182。

总结

以上是内存溢出为你收集整理的swift – 在Int上使用setValue(value,forKey:key)?类型触发非键值编码兼容方法全部内容,希望文章能够帮你解决swift – 在Int上使用setValue(value,forKey:key)?类型触发非键值编码兼容方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存