title: protocol extension implementing KVO complaint property
body: <pre><code>public class EntityA: NSManagedObject {
    @NSManaged public private(set) var identifier: String
    @NSManaged public private(set) var name: String
  }
  
  public class EntityB: NSManagedObject {
    @NSManaged public private(set) var identifier: String
    @NSManaged public private(set) var name: String
  }
  
  protocol NodeRepresentable {
      var children: NSArray { get }
      static var childrenKeyPaths: [String] { get }
  }
  
  
  extension NodeRepresentable where Self: NSManagedObject {
      var children: NSArray { //swift compiler doesn't see this as KVC complaint
          return Self.childrenKeyPaths.flatMap { keyPath in
              return self.mutableSetValueForKey(keyPath)
          }
      } 
  }
  
  extension EntityA: NodeRepresentable {
      static var childrenKeyPaths: [String] {
          return ["events", "groups", "races"]
      }
  
      var _children: NSArray { //this is KVC complaint
          return self.children
      }
  }
  
  extension EntityB: NodeRepresentable {
  
      static var childrenKeyPaths: [String] {
          return ["events", "groups", "markets"]
      }
  
      var _children: NSArray { //this is KVC complaint
          return self.children
      }
  }
  </code></pre>
  
  <p>Compiler doesn't find valueForKey for children on EntityA and EntityB.
  Protocol extensions don't seem to implement KVO complaint properties. I've tried declaring dynamic properties on protocol but that doesn't work.</p>
  
  <p>Is somehow possible to avoid declaring computed var on each Entity using some type of language feature? </p>