缺少返回UITableViewCell

时间:2015-05-12 11:27:26

标签: ios uitableview swift

我确信之前已经问过这个问题,但我找不到一个能够解决嵌套if-else和switch-case逻辑问题的答案。
我有一个UITableView有两个部分,每个部分有两个自定义单元格。就是这样。 4个细胞。但无论我做什么,我都会得到“在预期返回UITableViewCell”的函数中缺少返回

问题如何更改此设置,以便在底部获得一个满足快速逻辑的else语句?

非常感谢任何帮助

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if indexPath.section == 0{

        switch (indexPath.row) {
        case 0:
            let cell0: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell0", forIndexPath: indexPath) as! SettingsCell
        cell0.backgroundColor = UIColor.redColor()
        break

        case 1:
            let cell1: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! SettingsCell
        cell1.backgroundColor = UIColor.whiteColor()
         break

        default:
            break
        }
    }

    if indexPath.section == 1{

        switch (indexPath.row) {
        case 0:
            let cell10: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell10", forIndexPath: indexPath) as! SettingsCell
        cell10.backgroundColor = UIColor.redColor()
        break

        case 1:
            let cell11: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell11", forIndexPath: indexPath) as! SettingsCell
        cell11.backgroundColor = UIColor.whiteColor()
         break

        default:
            break

        }
    }
}

4 个答案:

答案 0 :(得分:9)

  • 在方法开头声明单元格,
  • 根据部分和行号
  • 为单元格指定值
  • 在“不应该发生”的所有情况下抛出fatalError()
  • 返回牢房。

另请注意,不需要break语句。默认 在Swift中的行为是而不是以适应下一个案例。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: SettingsCell

    switch(indexPath.section) {
    case 0:
        switch (indexPath.row) {
        case 0:
            cell = tableView.dequeueReusableCellWithIdentifier("cell0", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.redColor()

        case 1:
            cell = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.whiteColor()

        default:
            fatalError("Unexpected row \(indexPath.row) in section \(indexPath.section)")
        }
    case 1:
        switch (indexPath.row) {
        case 0:
            cell = tableView.dequeueReusableCellWithIdentifier("cell10", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.redColor()

        case 1:
            cell = tableView.dequeueReusableCellWithIdentifier("cell11", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.whiteColor()

        default:
            fatalError("Unexpected row \(indexPath.row) in section \(indexPath.section)")

        }
    default:
        fatalError("Unexpected section \(indexPath.section)")

    }
    return cell
}

fatalError()错误功能标记为@noreturn,所以 编译器知道程序执行不会继续执行 默认情况。 (这也有助于在程序中找到逻辑错误。)

编译器验证是否已将值分配给cell 其他情况。

初始化常量let cell ...)的可能性 方式是Swift 1.2中的新功能。

或者,您可以创建一个单元格并“立即”返回 在每种情况下:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    switch(indexPath.section) {
    case 0:
        switch (indexPath.row) {
        case 0:
            let cell = tableView.dequeueReusableCellWithIdentifier("cell0", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.redColor()
            return cell

        case 1:
            let cell = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.whiteColor()
            return cell

        default:
            fatalError("Unexpected row \(indexPath.row) in section \(indexPath.section)")
        }
    case 1:
        switch (indexPath.row) {
        case 0:
            let cell = tableView.dequeueReusableCellWithIdentifier("cell10", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.redColor()
            return cell

        case 1:
            let cell = tableView.dequeueReusableCellWithIdentifier("cell11", forIndexPath: indexPath) as! SettingsCell
            cell.backgroundColor = UIColor.whiteColor()
            return cell

        default:
            fatalError("Unexpected row \(indexPath.row) in section \(indexPath.section)")

        }
    default:
        fatalError("Unexpected section \(indexPath.section)")
    }
}

再次,调用fatalError()解决了“缺少返回预期”编译器 错误。

如果存在不同类型的细胞,则此模式可能很有用 (在每种情况下创建(使用不同的类)。

答案 1 :(得分:2)

您必须返回一个单元格,如果该部分为数字2,则此方法不会返回任何内容,当您指定多于两个的区域时,情况就是如此。溶液

  • 第二"如果"将是"否则"部分
  • 限制部分数

答案 2 :(得分:0)

你错过了 return语句

返回语句的示例。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if indexPath.section == 0{

        switch (indexPath.row) {
        case 0:
            let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell0", forIndexPath: indexPath) as! SettingsCell
        cell.backgroundColor = UIColor.redColor()
        break

        case 1:
            let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! SettingsCell
        cell.backgroundColor = UIColor.whiteColor()
         break

        default:
            let cellId: NSString = "Cell"
            var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell
            break
        }
    }

    if indexPath.section == 1{

        switch (indexPath.row) {
        case 0:
            let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell10", forIndexPath: indexPath) as! SettingsCell
        cell.backgroundColor = UIColor.redColor()
        break

        case 1:
            let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell11", forIndexPath: indexPath) as! SettingsCell
        cell.backgroundColor = UIColor.whiteColor()
         break

        default:
             let cellId: NSString = "Cell"
             var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell
            break

        }
    }
    return cell
}

答案 3 :(得分:0)

你可以使用其他if 像这样:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

if indexPath.section == 0{

    switch (indexPath.row) {
    case 0:
        let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell0", forIndexPath: indexPath) as! SettingsCell
    cell.backgroundColor = UIColor.redColor()
    break

    case 1:
        let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! SettingsCell
    cell.backgroundColor = UIColor.whiteColor()
     break

    default:
        break
    }


    else if indexPath.section == 1{

    switch (indexPath.row) {
    case 0:
        let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell10", forIndexPath: indexPath) as! SettingsCell
    cell.backgroundColor = UIColor.redColor()
    break

    case 1:
        let cell: SettingsCell! = tableView.dequeueReusableCellWithIdentifier("cell11", forIndexPath: indexPath) as! SettingsCell
    cell.backgroundColor = UIColor.whiteColor()
     break

    default:
        break

    }
}
return cell
}
}

它可以帮助你尝试