可选错误Swift 1.2到2.0

时间:2015-10-22 23:27:04

标签: ios swift uitableview

我正在尝试将Swift 1.2转换为2.0,但我遇到问题,分配tablviewCell表格dequeueReusableCellWithIdentifier:

var cell:UITableViewCell? = tableview!.dequeueReusableCellWithIdentifier(identifier as String) as? UITableViewCell;

if (cell == nil)
{
    cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: identifier as String)
    cell?.backgroundColor = UIColor.clearColor()
}

错误:

  

Downcast表单UITableViewCell到UITableViewcell只能解包   选项,你的意思是使用'!'?

我相信func dequeueReusableCellWithIdentifier不会返回可选项,所以我尝试过:

var cell:UITableViewCell = tableview.dequeueReusableCellWithIdentifier(identifier as String)     
if (cell == nil){
    ...

我得到两个错误:

  

可选类型tableview的值未解包,你的意思是使用!   二进制运算符不能应用于UITableViewCEll类型的操作数   和Niliretalconversion。

赞赏任何输入

2 个答案:

答案 0 :(得分:1)

如果您确定,该演员表是正确的,那么您可以这样做:

var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifer as String) as UITableViewCell!;

        if (cell == nil)
        {
            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: identifer as String)
            cell?.backgroundColor = UIColor.clearColor()
        }

如果你不确定演员阵容绝对不是零,你可以这样做:

var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifer as String) as? UITableViewCell?;

请注意,在这种情况下,您不应明确标识cell参数的类型,因为Swift会自动推断它。

答案 1 :(得分:1)

dequeueReusableCellWithIdentifier返回UITableViewCell?。您尝试将其转换为非可选(as? UITableViewCell),但随后将其分配回可选(cell:UITableViewCell?)。你没有从这项额外的工作中获得任何信息,并且可能使用了更简单的等效表达式。你最初的警告似乎是由于这种令人困惑的被忽视的演员而造成的。

var cell:UITableViewCell? = tableview!.dequeueReusableCellWithIdentifier(identifier as String)

我们知道cell的类型,因为它与dequeueReusableCellWithIdentifier的返回类型匹配,所以我们可以写:

var cell = tableview!.dequeueReusableCellWithIdentifier(identifier as String)

我无法说明identifier的类型是什么,但as建议可以始终成功转换为String,因此您可以进一步简化为:< / p>

var cell = tableview!.dequeueReusableCellWithIdentifier(identifier)

使用if letguard分配可能会进一步简化整个条件,但如果不知道调用它的较大上下文,则很难确定。