【发布时间】:2014-08-26 10:41:36
【问题描述】:
我有简单的课程User。当我尝试调用 valueForKey 其中 key 是可选值时,我得到一个错误。见下文:
class User : NSObject{
var name = "Greg"
var isActive:Bool?
}
var user = User()
user.isActive = true // initiated
var ageValue : AnyObject! = user.valueForKey("name")// OK
var isActive : AnyObject! = user.valueForKey("isActive") //ERROR
<__lldb_expr_862.user> valueForUndefinedKey:]:这个类对于键 isActive 不符合键值编码。
如果我启动该值,它将起作用:
var isActive:Bool = true
如何使它与可选值一起工作?
【问题讨论】:
-
@Zaph 我构建了 JSON 转换器,我需要通过将键提供为字符串来获取价值
-
一些swift类型不能在Obj-C中表示,因此不能参与KVO。 Optional Bool 就是这样一种类型。如果您将关键字
dynamic放在var isActive:Bool?之前,您会看到编译器抱怨它... -
目前在这种情况下,可选整数类型(Bool?)和Objective-C NSNumbers之间没有自动映射,所以
isActive不能用valueForKey获取可选整数类型和 NSNumber 之间的正常自动映射工作。 -
您可以按照 osanoj 的建议执行诸如覆盖
valueForKey或valueForUndefinedKey之类的操作,但即使有可能,也很难将其用于通用案例。 -
@David 感谢您的澄清。希望在下一个测试版中...... :)