title: Protocol can only be used as a generic constraint because it has Self or associatedType requirements
body: <p>I have a protocol RequestType and it has associatedType Model as below.</p>
  
  <pre><code>public protocol RequestType: class {
  
      associatedtype Model
      var path: String { get set }
  
  }
  
  public extension RequestType {
  
      public func executeRequest(completionHandler: Result&lt;Model, NSError&gt; -&gt; Void) {
          request.response(rootKeyPath: rootKeyPath) { [weak self] (response: Response&lt;Model, NSError&gt;) -&gt; Void in
              completionHandler(response.result)
              guard let weakSelf = self else { return }
              if weakSelf.logging { debugPrint(response) }
          }
      }
  
  }
  </code></pre>
  
  <p>Now I am trying to make a queue of all failed requests.</p>
  
  <pre><code>public class RequestEventuallyQueue {
  
      static let requestEventuallyQueue = RequestEventuallyQueue()
      let queue = [RequestType]()
  
  }
  </code></pre>
  
  <p>But I get the error on line <code>let queue = [RequestType]()</code> that Protocol RequestType can only be used as a generic constraint because it has Self or associatedType requirements.</p>