title: Why does the type not conform to protocol?
body: <p>Let's have the following piece of code:</p>
  
  <pre><code>protocol ItemView {
  
      var image: UIImage? { get set }
  }
  
   class BaseController&lt;T: UIView where T: ItemView&gt;: UIViewController {
  
      var itemView = T()
  }
  
  class ConcreteItemController: BaseController&lt;UIImageView&gt; {
  
  }
  </code></pre>
  
  <p>For the BaseController I am getting an error message saying "Type "UIImageView" does not conform to protocol "ItemView"".</p>
  
  <p>But why?</p>
  
  <p>Same error message shows up when I do this instead:</p>
  
  <pre><code> typealias ConcreteItemController = BaseController&lt;UIImageView&gt; 
  </code></pre>
  
  <p>I am really missing something here...why would the UIImageView not conform to ItemView protocol? It HAS an optional image property..so where's the problem?</p>