2017-08-10 3 views
0

キー値コーディングを使用してオブジェクトのスーパークラスのプロパティにアクセスできますか?私は、このランタイムエラーを得た、キー値コーディングでスーパークラスプロパティにアクセスするにはどうすればよいですか?

class Bar: Foo { 
    var shouldOverridePropertyOfFoo: Bool = false 

    var propertyOfFoo: String { 
     if shouldOverrideProperty { 
      return "property of Bar" 
     } else { 
      return value(forKeyPath: "super.propertyOfFoo") as! String 
     } 
    } 
} 

:しかし

が、私はこのような何かを試してみました

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: ' [<MyModule.Bar 0x2da2cf003e00> valueForUndefinedKey:] : this class is not key value coding-compliant for the key super .'

注:私はhow to override private method and call super in swift?

答えて

1

代わりのsuper.aPropertyOfFooを把握しようとしています、 Foo.aPropertyOfFooを使用する必要があります。これは、の代わりに#keyPathを使用すると便利です。

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" 
関連する問題