缺less返回UITableViewCell

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

问题如何更改此设置,以便在满足swift逻辑的底部得到一个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 } } } 
  • 在方法的开始处声明单元格,
  • 根据段和行号为单元赋值,
  • 在所有“不应该发生”的情况下抛出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 ,所以编译器知道程序执行不会从默认情况下继续。 (这也有助于发现程序中的逻辑错误。)

在所有其他情况下,编译器会validation是否将值分配给cell

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


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

 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()解决了“缺less期望的返回”编译器错误。

如果在每种情况下创build不同types的单元格(具有不同的类),则此模式可能很有用。

你必须返回一个单元格,如果该部分是数字2,这个方法将不会返回任何东西,那么当你指定两个以上的部分时就是这种情况。 解

  • 第二个“如果”将是“其他”部分
  • 限制部分的数量

你错过了你的方法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 } 

你可以使用其他的,如果这样的话:

 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 } } 

它可能会帮助你尝试