title: Protocol can only be used as a generic constraint
body: <p>I have a MapViewController for presenting annotations on map. It contains an 
  object of type MapPresentable.</p>
  
  <pre><code>protocol MapPresentable {
      associatedtype AnnotationElement: MKAnnotation
      var annotations: [AnnotationElement] { get }
  }
  
  class MapViewController&lt;M: MapPresentable&gt;: UIViewController {
      var mapPresentable: M!
  }
  </code></pre>
  
  <p>MapViewController can also present route on map in case <code>mapPresentable</code> conforms to RoutePresentable protocol.</p>
  
  <pre><code>protocol RoutePresentable: MapPresentable {
      var getRouteLocations: [CLLocation] { get }
  }
  </code></pre>
  
  <p>But when checking made inside <code>MapViewController</code></p>
  
  <pre><code>if let routePresentable = mapPresentable as? RoutePresentable {
      showRoute(routePresentable.getRouteLocations)
  }
  </code></pre>
  
  <p>I got this Error:</p>
  
  <pre><code>Protocol 'RoutePresentable' can only be used as a generic constraint because it has Self or associated type requirements
  </code></pre>