title: Force downcast when programming a custom UITableViewCell in Swift
body: <p>In the following code:</p>
  
  <pre><code>let cell = tableView.dequeueReusableCell(
      withIdentifier: "MyCell",
      for: indexPath
  ) as MyTableViewCell  // 'UITableViewCell' is not convertible to 'MyTableViewCell'; did you mean to use 'as!' to force downcast?
  </code></pre>
  
  <p>We have the error complaining that <code>UITableViewCell</code> is not convertible to a <code>MyTableViewCell</code>.</p>
  
  <p>So the compiler suggests to do a force cast:</p>
  
  <pre><code>let cell = tableView.dequeueReusableCell(
      withIdentifier: "MyCell",
      for: indexPath
  ) as! MyTableViewCell  // ?!?!?!
  </code></pre>
  
  <p>However, that feels ugly.</p>
  
  <p>Is there no alternative to force casting when dealing with <code>tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)</code>? Is this really the most idiomatic way to accomplish this in Swift?</p>
  
  <p>Thanks!</p>