在Swift上创建UITableView单元格

erd*_*mgc 7 uitableview ios swift

我试图用我的委托方法cellForRowAtIndexPath创建带有swift的UITableViewCell,

代码很简单,就像在Objective-c中一样,只是试图将语言变为swift.

我在这条线上遇到错误

var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UITableViewCell

    if(cell == nil)
    {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle,reuseIdentifier:cellIdentifier)
    }
Run Code Online (Sandbox Code Playgroud)

错误是UITableViewCell无法转换为"MirrorDisposition"

我查了一些例子,代码是这样的

if !cell
{let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle,reuseIdentifier:cellIdentifier)
}
Run Code Online (Sandbox Code Playgroud)

但它也给出了一个错误.

我究竟做错了什么?

Woo*_*ock 11

截至最新的beta(beta 6),非可选类型无法与nil进行比较.

因此,您必须将单元格Var声明为Optional.

像这样的东西会正常工作(我的头顶 - 我没有Xcode在我面前):

//declare a tableViewCell as an implicitly unwrapped optional...
var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? UITableViewCell

//you CAN check this against nil, if nil then create a cell (don't redeclare like you were doing...
if(cell == nil)
{
  cell = UITableViewCell(style: UITableViewCellStyle.Subtitle,reuseIdentifier:cellIdentifier)
}
Run Code Online (Sandbox Code Playgroud)


Ano*_*rak 9

一个更好的选择是使用更现代的方法,它总是返回一个单元格(只要你使用故事板,或者为单元格注册了笔尖或类)

let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
Run Code Online (Sandbox Code Playgroud)

由于该方法总是返回一个单元格,因此它不是可选的,并且不需要检查nil.