Swiftで「Could not find an overload for '==' that accepts the supplied arguments」というエラーが出た場合

swift

以下のコードの3行目でエラーが発生しました。

1
2
3
4
5
var cell = tableView.dequeueReusableCellWithIdentifier(CellIdentifier) as! UITableViewCell

if (cell == nil) {
    cell = UITableViewCell(style: .Default, reuseIdentifier: CellIdentifier)
}

エラー内容

このようなエラーです。

1
Could not find an overload for '==' that accepts the supplied arguments

原因

理由は最初のコードの1行目でas!を使用しているため、cellはoptional型ではないのに、3行目でnilチェックをしているためです。

解決策

なので、解決策は以下の二つのどちらかです。

  • 1行目のas!as?に変えてcellをoptional型にする。
  • nilではないのが明らかなので、3〜5行目を削除する。

私の場合は、他の場所で-registerClass:forCellReuseIdentifierを使ってデフォルトのUITableViewCellを登録しており、nilにはなり得なかったので、二つ目の方法を採用しました。

参考

Swift: could not find an overload for conversion that accepts supplied argument

羊毛や小麦