我正在尝试使用swift创建UITableViewCell,在我的委托方法cellForRowAtIndexPath上,
代码很简单,就像在Objective-c中一样,只是试图将语言变形为快速。
我在这一行收到错误
var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UITableViewCell
if(cell == nil)
{
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle,reuseIdentifier:cellIdentifier)
}
错误是UITableViewCell无法转换为“MirrorDisposition”
我已查找示例,代码就像这样
if !cell
{let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle,reuseIdentifier:cellIdentifier)
}
但它也会出错。
我做错了什么?
答案 0 :(得分:11)
截至最新测试版(测试版6)非可选类型无法与nil 进行比较。
因此,您必须将您的单元格Var声明为可选。
这样的东西会正常工作(我的头顶 - 我不会在我面前有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)
}
答案 1 :(得分:9)
更好的选择是使用更现代的方法,它总是返回一个单元格(只要你使用故事板,或者为单元格注册了笔尖或类)
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
由于该方法总是返回一个单元格,因此它不是可选的,并且不需要检查nil。