在期望返回'UITableViewCell的函数中缺少返回

时间:2018-02-05 16:44:17

标签: ios swift uitableview switch-statement

为什么我会收到此错误? Switch语句不返回单元格? 有人可以解释一下吗?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    switch indexPath.row {
    case 0:
        let cell = tableView.dequeueReusableCell(withIdentifier: "LogoStyle1", for: indexPath) as! LogoStyle1
        cell.backgroundColor = UIColor.clear
        return cell
    case 1:
        let cell = tableView.dequeueReusableCell(withIdentifier: "FieldStyle1", for: indexPath) as! FieldStyle1
        cell.backgroundColor = UIColor.clear
        cell.delegate = self
        return cell
    case 2:
        let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonStyle1", for: indexPath) as! ButtonStyle1
        cell.backgroundColor = UIColor.clear
        cell.delegate = self
        return cell
    default:
        break
    }
}

2 个答案:

答案 0 :(得分:3)

这是编译器过度担心的事情之一。编译器基本上问你,如果indexPath.row既不是0也不是1还是2,该怎么办?在那种情况下返回什么。作为程序员,您知道indexPath.row将始终是其中一个值,但编译器不知道。

所以你需要在default的情况下返回一些东西,但返回任何东西都没有意义,是吗?在这种情况下,我只想写:

fatalError("Somehow indexPath.row is an unexpected value.")

如果达到default案例,这将导致应用程序崩溃。如果达到默认情况,则可能意味着您的代码出现了问题(或者可能是API中的错误(不太可能)!),因为您知道表视图只有3行。该应用程序可能应该在此时崩溃。

答案 1 :(得分:1)

即使 numberOfRowsInSection 为0,

CellForRowAtIndexPath 委托方法也会返回单元格。因此,在默认的swicth块中,您需要返回一个单元格。 错误将消失。