title: Implement generic protocol method with but use generic for whole class
body: <p>I'm am trying to implement a protocol method that has a generic argument, but then use the generic type for my entire class instead of just on the method, something like this</p>
  
  <pre><code>protocol FirstProtocol {
  }
  
  protocol SecondProtocol {
      func foo&lt;T: FirstProtocol&gt;(argument: T)
  }
  
  class MyType&lt;T: FirstProtocol&gt;: SecondProtocol {
      var value: T? = nil
      func foo&lt;T&gt;(argument: T) {
          value = argument     // ERROR: Cannot assign value of type 'T' to type 'T?'
      }
  }
  </code></pre>
  
  <p>So the swift compiler accepts that <code>foo&lt;T&gt;(argument:T)</code> matches the method of <code>SecondProtocol</code>, if I comment out the error line it compiles fine, but it will not let me assign <em>argument</em> to <em>value</em> even though <em>value</em> and <em>argument</em> should be the same type, the compiler complains as if they are different types.</p>