title: Swift protocol conformance requirements for subtypes
body: <p><em>(if someone can suggest a better title, please do)</em></p>
  
  <p>The following code does not compile with an error <code>Type 'ObserverClass' does not conform to protocol 'Observer'</code>, and compiler suggests a fix by declaring <code>var object: ObservedObject</code>.</p>
  
  <pre><code>class ObservedObject {}
  class ObservedObjectSubclass: ObservedObject {}
  
  protocol Observer {
      var object: ObservedObject { get }
  }
  
  class ObserverClass: Observer { // Type 'ObserverClass' does not conform to protocol 'Observer'
  
      // suggested:
      // var object: ObservedObject
  
      var object: ObservedObjectSubclass = ObservedObjectSubclass()
  }
  </code></pre>
  
  <p>The way i see it - <code>ObservedObjectSubclass</code> <strong>is</strong> <code>ObservedObject</code>, and so <code>object</code> property is guaranteed to be of type <code>ObservedObject</code> as required by the protocol. </p>
  
  <p>(The same is true, if using protocol conformance instead of subclassing - below)</p>
  
  <pre><code>protocol ObservedObjectProtocol {}
  protocol Observer {
      var object: ObservedObjectProtocol { get }
  }
  
  class ObservedObject: ObservedObjectProtocol {}
  
  class ObserverClass: Observer { // same error
      var object: ObservedObject = ObservedObject()
  }
  </code></pre>
  
  <p>Why is compiler unhappy? Is it current limitation, or the compiler is actually right and there is some logical constraint?</p>