title: What is the purpose of as? in Swift?
body: <p>In Swift I can use <code>as?</code> to downcast a type to another type. If the casting fails then <code>nil</code> is returned. </p>
  
  <p>If I use <code>as!</code> and the casting fails then an error is thrown. </p>
  
  <p>Why do we have <code>as?</code> and <code>as!</code>? Why not just <code>as</code> like C# and other languages. If the casting fails just return null and that's it! </p>