有以下示例:
enum Gender{
case male
case female
}
class Person:NSObject{
var name: String?
var gender:Gender?
}
let p = Person()
p.name = "A"
p.gender = .male
p.value(forKey:"name") //A
p.value(forKey:"gender") //Error: KVO compliant Error
如何为枚举类型属性实现KVC?
答案 0 :(得分:1)
看来你的意思是KVC(键值编码),而不是KVO(键值观察)。
打扰KVC和KVO是Objective-C NSObject功能。在Swift中,除了从NSObject派生的类(不是枚举)之外,你不能使用它们。
答案 1 :(得分:0)
正如matt所提到的,KVC需要从NSObject继承,这就是你遇到enum
问题的原因。根据您的具体情况,您可以使用Mirror:
enum Gender{
case male
case female
}
class X {
var z = Gender.male
}
let x = X()
let mirror = Mirror(reflecting: x)
for (name, value) in mirror.children {
print("\(name)=\(value)")
}
这将打印以下内容:
Optional("z")=male