title: Cannot assign value of type 'String?' to type 'String'
body: <pre><code>class C{
   var b:[String]?
   subscript(i:Int)-&gt;String?{
    get{
     return b?[i]
    }
    set{
     b?[i] = newValue! // notice the unwrapped “!” here
    }
   }
  }
  </code></pre>
  
  <p>In the code, I put a exclamation mark "!" to unwrap the <code>newValue</code>,
  Because <code>newValue</code> is the same type of the return value of subscript which is String?.
  If I don't put the exclamation mark "!" it will report error:
     "</p>
  
  <blockquote>
    <p>error: cannot assign value of type 'String?' to type '<code>String</code>'      <code>b?[i] = newValue</code></p>
  </blockquote>
  
  <p>"
  Question:  <code>b?[i]</code> is obviously an optional String value String?, how come it is of type String.
  I wonder it was a bad error code</p>