【问题标题】:How access superclass property with key-value coding?如何使用键值编码访问超类属性?
【发布时间】:2017-08-10 11:54:33
【问题描述】:

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

我尝试过这样的事情:

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 的键值编码不兼容。”

注意:我正在尝试找出how to override private method and call super in swift?

【问题讨论】:

    标签: swift super key-value-coding


    【解决方案1】:

    您必须使用Foo.aPropertyOfFoo 而不是super.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"
    

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 2015-01-23
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多