【问题标题】:Optional errors Swift 1.2 to 2.0可选错误 Swift 1.2 到 2.0
【发布时间】:2016-01-22 09:46:04
【问题描述】:

我正在尝试将 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()
}

错误:

仅将 UITableViewCell 向下转换为 UITableViewcell 可选项,你的意思是使用 '!' 吗?

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

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

我得到两个错误:

可选类型 tableview 的值未解包,您是要使用吗? 二元运算符不能应用于 UITableViewCEll 类型的操作数 和 Niliretalconversion。

任何意见表示赞赏

【问题讨论】:

    标签: ios swift uitableview


    【解决方案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,因此您可以进一步简化为:

    var cell = tableview!.dequeueReusableCellWithIdentifier(identifier)
    

    整个条件可以通过if letguard 赋值进一步简化,但如果不知道调用它的更大上下文,就很难确定。

    【讨论】:

      【解决方案2】:

      如果你确定转换是正确的,那么你可以这样做:

      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 会自动推断它。

      【讨论】:

      • 谢谢,仍然对可选选项感到困惑!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多