如何在Swift中使用dequeueReusableCellWithIdentifier?

如果我取消注释

tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) 

我得到一个错误的线

 let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 

那是说UITableView? does not have a member named 'dequeueReusableCellWithIdentifier' UITableView? does not have a member named 'dequeueReusableCellWithIdentifier'

如果我打开tableview然后错误消失,但在Objective-C中,我们通常会检查单元格是否存在,如果不存在,我们将创build一个新的单元格。 在Swift中,由于提供的样板使用了let关键字并解开可选项,所以如果为零,我们不能重新指定它。

什么是在Swift中使用dequeueReusableCellWithIdentifier的正确方法?

您可以隐式地将参数解包到方法中,也可以将dequeueReusableCellWithIdentifier的结果dequeueReusableCellWithIdentifier转换为以下简洁的代码:

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell //configure your cell return cell } 

如果单元格types尚未在表格视图中注册,则可以使用以下操作来获取单元格实例:

 private let cellReuseIdentifier: String = "yourCellReuseIdentifier" // MARK: UITableViewDataSource func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) if (cell == nil) { cell = UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:cellReuseIdentifier) } cell!.textLabel!.text = "Hello World" return cell! } 

你需要解包tableViewvariables,因为它是可选的

 if let realTableView = tableView { let cell = realTableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) // etc } else { // tableView was nil } 

或者你可以缩短它

 tableView?.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 

在回答“Objective-C中的问题”时,我们通常会检查单元格是否存在,如果不存在,我们创build一个新单元格, dequeueReusableCellWithIdentifier总是返回一个单元格(只要你已经注册了一个类或这个标识符是一个笔尖),所以你不需要创build一个新的标识符。

swift 3版本:

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier:"CellIdentifier", for: indexPath) as UITableViewCell return cell } 

在Swift 3和Swift 4版本中,你只需要使用它

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath as IndexPath) as UITableViewCell cell.textLabel?.text = "cell number \(indexPath.row)." //cell code here return cell } 

在Swift 2版本

  func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell cell.textLabel?.text = "cell number \(indexPath.row)." //cell code here return cell }