Я не могу заставить цепочку ключ-значение (KVC) работать в Swift для составных путей
Рассмотрим следующий класс, который может быть выполнен в Xcode Playground:
import Foundation
class MyClass : NSObject {
var stringProperty:String
var integerProperty:Int
var linkedInstance:MyClass!
init(String string:String, Int int:Int) {
stringProperty = string
integerProperty = int
}
}
Следующие строки работают как положено.
var myInstance = MyClass(String: "xxx", Int: 32)
myInstance.valueForKey("stringProperty")
myInstance.setValue(2, forKey: "integerProperty")
myInstance.valueForKey("integerProperty")
var anotherInstance = MyClass(String: "yyy", Int: 33)
myInstance.linkedInstance = anotherInstance
myInstance.linkedInstance.integerProperty = 2
Однако, пытаясь получить доступ к значению с помощью KVC через составной путь,
myInstance.valueForKey("linkedInstance.integerProperty")
Причина ошибки "Выполнение было прервано, сигнал причины SIGABRT." Я не заставлял составные пути работать со Swift, но они хорошо работают в Objective-C. Доза это связано с опциями? Значения для простых путей возвращаются в оболочке.
1 ответ
Как только вы измените эту последнюю строку на
myInstance.valueForKeyPath("linkedInstance.integerProperty")
Ваша игровая площадка будет играть намного лучше с вами.
Урок: не путай valueForKey:
с valueForKeyPath:
! Выражение valueForKey("linkedInstance.integerProperty")
никогда не может преуспеть в Swift или Objective-C, потому что"linkedInstance.integerProperty"
это не ключ - это ключевой путь.