返回UITableView的值

问题描述:

我有UITableView和contect是动态原型。返回UITableView的值

所以我有5个单元格,每个单元格都有自己的标识符。 所以当我尝试返回(cellForRowAt) 中的值,它会让我。

请帮忙吗?

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

    if (indexPath.section) == 0 { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as UITableViewCell! 
     // cell?.textLabel!.text = objectsArray[indexPath.section].sectionObjects[indexPath.row] 


     return cell! 

    } 
    else if (indexPath.section) == 2 { 
     let cell3 = tableView.dequeueReusableCell(withIdentifier: "cellThree") as UITableViewCell! 
     return cell3! 
    } 

    else if (indexPath.section) == 3 { 
     let cell4 = tableView.dequeueReusableCell(withIdentifier: "cellFour") as UITableViewCell! 
     return cell4! 
    } 

    else if (indexPath.section) == 4 { 
     let cell5 = tableView.dequeueReusableCell(withIdentifier: "cellFive") as UITableViewCell! 
     return cell5! 
    } 

    return cell! 

} 

谢谢!

新的更新: -

从而呈现给我的错误的是(使用未解决的标识符“细胞”)的 所以,当我在最后(!恢复单元)返回它显示了这个error.However,如果我删除该行,它会向我显示另一个错误,要求我返回一个值

如此底线我很满意我应该在(cellForRowAt)结尾处返回什么值。

+0

那么,怎么了?如果没有告诉我们什么不工作/你得到了什么错误以及预期的行为是什么,我们无法提供帮助。 –

+0

你确切的问题是什么?这是没有意义的“返回价值UITableView ” –

+0

我刚刚更新了我的问题。对不起,关于 – Nawaf

返回值:

此方法只能每次它被称为一次返回一个细胞。每当新单元即将出现在屏幕上时,该方法将被调用。在方法签名看看:

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

UITableViewCell末是预期的返回值,在这种情况下,它是一个单细胞。

错误

让我们来看看你的错误:

Use of unresolved identifier 'cell'

“未解决的标识符”意味着它已经不知道什么是“细胞”,是因为它没有在当前范围内声明。但是不要在这个方法中声明cell?是的,但他们在一个单独的范围内。变量作用域定义了变量的存在时间以及可以看到的位置。当您看到一组新的大括号{}(您的if每个语句声明)时,您可以知道何时声明新变量作用域。在每组花括号中声明的变量只能通过括号内的代码来看到。一旦执行离开括号,那些变量就消失了。让我们来看看哪些变量是你最后的return声明范围之内可见通过去除您if语句创建的范围:

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


    return cell! 
} 

现在很明显,cell不会在返回的点存在。您需要在方法的范围内声明cell并给它一些价值。请注意,拆解你的单元可选项的力量可能会导致运行时崩溃,因为该方法不能返回niltableView.dequeueReusableCell()返回nil时,您需要创建单元格。

编辑:我刚刚意识到你没有使用dequeueReusableCellWithIdentifier中的for indexPath参数。使用它,否则它是错误的。请参阅:

@Nawaf你不能从任何函数返回多个值,所以你不能从一个cellForRow调用返回多个单元格。你可能会误解cellForRowAtIndexPath的工作原理。现在你的代码没有在单元格中填充任何东西。

Use of unresolved identifier 'cell'

此外,您的错误可能由于多种原因而发生。首先,检查你的视图控制器是否正确地分配到故事板中的视图控制器,并且你已经在故事板中分配了一个reuseIdentifier。

见链接,了解更多信息: https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview?language=objc

How does cellForRowAtIndexPath work?

另外一个侧面说明了代码质量:不要逼投的电池,因为这可能会导致意外的错误。使用条件约束,而不是:

guard let cell = tableView.dequeueReusableCellWithIdentifier(...) as? UITableViewCell else { // What to do when the cast failed }

祝你好运:)

+0

当演员阵容失败时你会怎么做? 'cellForRow'是我使用强制转换的情况之一;在运行时没有明智的方式来处理失败,如果强制倒下,在开发过程中会很快崩溃,并且可以找出为什么找不到单元格 – Paulw11

+0

如果转换失败,您可能有问题,那就是分析框架可以报告某个活动应用程序崩溃。然后,你将能够检查这是否是一个用户,并且崩溃不是你的目的,或者看看是否有明显的错误必须修复。等等。这只是一个偏好问题。是的,在开发过程中,更容易看到力量崩溃=错误。 –