2016-11-14 3 views
0

Существует пример, как следующее:Как получить значение свойства перечислимого по КЦУ

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

Как указано матом, 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