title: Protocol requirement cannot be satisfied by a non-final class because it uses 'Self' in a non-parameter, non-result type
body: <p>I want to implement a protocol with a class method that takes an array of the implementing class as a parameter.  For instance something like this:</p>
  
  <pre><code>protocol MyProtocol {
      static func foo(verticies: [Self]) -&gt; Int
  }
  
  class MyClass : MyProtocol {
      class func foo(verticies: [MyClass]) -&gt; Int {
          return 42
      }
  }
  </code></pre>
  
  <p>When I attempt this, I get the following error:</p>
  
  <blockquote>
    <p>Protocol 'MyProtocol' requirement 'foo()' cannot be satisfied by a non-final 'MyClass' class because it uses 'Self' in a non-parameter, non-result type</p>
  </blockquote>
  
  <p>But this works perfectly if I use an object of type MyClass rather than an array:</p>
  
  <pre><code>protocol MyProtocol {
      static func foo(verticies: Self) -&gt; Int
  }
  
  class MyClass : MyProtocol {
      class func foo(verticies: MyClass) -&gt; Int {
          return 42
      }
  }
  </code></pre>
  
  <p>Why doesn't this work for an array type, and is there a correct way to do this?</p>