是否可以使用键值编码访问对象的超类属性?
我尝试了这样的事情:
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
,最好用#keyPath
s而不是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"