如何使用键值编码访问超类属性?



是否可以使用键值编码访问对象的超类属性?

我尝试了这样的事情:

class Bar: Foo {
var shouldOverridePropertyOfFoo: Bool = false
var propertyOfFoo: String {
if shouldOverrideProperty {
return "property of Bar"
} else {
return value(forKeyPath: "super.propertyOfFoo") as! String
}
}
}

但是,我得到了这个运行时错误:

由于未捕获的异常"NSUnknownKeyException"而终止应用程序,原因:"[<MyModule.Bar 0x2da2cf003e00> valueForUndefinedKey:]:此类不符合键super的键值编码。

注意:我正在尝试弄清楚如何覆盖私有方法并在 swift 中调用 super?

而不是super.aPropertyOfFoo,你必须使用Foo.aPropertyOfFoo,最好用#keyPaths而不是Strings来完成:

class Foo: NSObject {
@objc var aPropertyOfFoo = "property of foo"
}
class Bar: Foo {
var shouldOverridePropertyOfFoo: Bool = false
var propertyOfFoo: String {
if shouldOverridePropertyOfFoo {
return "property of bar"
} else {
return value(forKeyPath: #keyPath(Foo.aPropertyOfFoo)) as! String
}
}
}
let bar = Bar()
print(bar.propertyOfFoo) // "property of foo"

最新更新