在函数中缺少返回,期望返回带有两个tableView的“UITableViewCell”

时间:2016-10-18 15:14:51

标签: ios swift uitableview xcode8

我使用croll视图,并且在一个视图中有两个(或许多)tableView 像这样

layout

但是在功能:

a[class="rrc_pic"]

这是一个错误

  

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

但我做了

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

错误是如何发生的?

return cell

}

9 个答案:

答案 0 :(得分:2)

tableView != self.tableViewtableView != tableView2时,您什么都不返回。这就是你看到这个错误的原因。如果您确定无法达到此目的,请尝试删除else if条件

答案 1 :(得分:0)

您的唯一回报嵌套在IF语句中。因此,如果不满意,则不会返回任何内容。

答案 2 :(得分:0)

出现错误是因为当你的" if"声明和你的"否则如果"声明未得到履行。如果"你必须改变你的"否则陈述只是"否则"声明或返回错误发生的行中的单元格。

答案 3 :(得分:0)

您需要返回ifelse if也是false

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if(tableView == self.tableView) {
        //returning cell correctly
    } else if tableView == tableView2 {
        //returning cell correctly
    }
    //you need to return something here too
}

答案 4 :(得分:0)

你的整个方法有这样的结构:

if tableView == self.tableView {
    // blah blah blah
    return some stuff
} else if tableView == tableView2 {
    // blah blah blah
    return some stuff
}

那么如果tableView既不是self.tableView也不是tableView2怎么办?如果它是其他一些tableView怎么办?代码不会返回任何内容!

由于声明该方法返回UITableViewCell,因此不得返回任何内容。这就是错误出现的原因。

“但是tableView只能是那两个价值观!我保证!”你喊道。

但swift编译器并不知道你答应了。

如果你确实确定,你可以在if语句之外的方法末尾写fatalError("tableView is some other value")

此解决方案的优点是,它可以通过崩溃应用程序提醒您忘记在方法中添加else if子句。

如果您完全确定不会添加其他表格视图,则只需将else if更改为简单的else

答案 5 :(得分:0)

是的,大多数情况下这也发生在我身上。

所以,这就是你所做的。

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


if(tableView == self.tableView) {
    let cell: DetailTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! DetailTableViewCell
    //Some code for cell
    return cell
}

else if tableView == tableView2 {
    let cell: MaterialDetailTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell2") as! MaterialDetailTableViewCell
    //Some code for cell
    return cell
}

//--> Compiler Says: What should I do if both are false. I need to return cell anyways. Please guide me.!!!!
//--> Solution : Return Cell from here as well 

}

答案 6 :(得分:0)

我建议不要删除else if条件,而是添加一个else条件,其中包含断言以提醒您或某人更改该代码有关此意外行为似乎是更好的选择。

如果有人添加了新的表格视图,则需要更新此代码并删除else if将隐藏该事实。

if tableView == self.tableView {
    // ...
} else if tableView == tableView2 {
    // ...
} else {
    fatalError(" Unexpected behaviour: only 2 tables are supported")
    // Or any other assertion...    
}

答案 7 :(得分:0)

返回else中的tableviewcell

 return UITableViewCell()

答案 8 :(得分:0)

尝试一下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = UITableViewCell()
        switch tableView {
        case yourTableView1:
            cell = tableView.dequeueReusableCell(withIdentifier: "yourTV1Cell", for: indexPath)
            cell.textLabel?.text = //your text here
        case yourTableView2:
            cell = tableView.dequeueReusableCell(withIdentifier: "yourTV2Cell", for: indexPath)
            cell.textLabel?.text = //your text here
        default:
            print("...what else") //...or write your default case here

        }
        return cell

    }