如何通过KVC获取枚举属性值

时间:2016-11-14 03:04:15

标签: swift key-value-observing

有以下示例:

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?

2 个答案:

答案 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