2016-11-14 55 views
0
得到一个枚举属性值

有类似下面的示例:如何通过KVC

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,枚举类型属性?

回答

1

看起来你的意思是KVC(键值编码),而不是KVO(键值观察)。

Bother KVC和KVO是一个Objective-C NSObject特性。在Swift中,除了在派生自NSObject的类(不是枚举)之外,你不能使用它们。

0

正如Matt提到的,KVC需要NSObject的继承,这就是为什么你在enum上遇到问题。根据您的情况,您可以使用镜像:

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