繁体   English   中英

的NSString? 不能转换为'StringLiteralConvertible'&?! 在斯威夫特

[英]NSString? is not convertible to 'StringLiteralConvertible' & ?! in Swift

在AI类中,具有以下变量:

var collectionElement  : PFObject?

然后,我需要调用一个用户使用的方法。 但是在我想检查它是否为零之前。 所以我做类似的事情:

if collectionElement != nil{

  if let elementName = collectionElement["elementName"] as? NSString{
    elementTitle.text = elementName as String
  }
       ...

  query.whereKey("fileCollectionElement", equalTo:collectionElement!)
}

在BI类中,如下分配值:

cell.collectionElement = collectionElements[indexPath.row]

其中collectionElements [indexPath.row]是PFObject。

这段代码给了我错误,并且玩弄了! 和?,我可以使应用程序运行,但会崩溃,特别是由于行coll ...!= nil

我真的很困惑吗? 和! 的东西。 什么时候使用正确的东西? 为什么有时我不能检查是否为零(在Objective-C中我可以一直做到)?

和! 对于变量: 当变量可以是对象或可以为nil时使用。 当变量可能是一个对象或可以为nil时使用,但绝对不能为nil。 这样可以避免编码器每次都必须拆开包装。

和! 转换:“ x as?y”检查是否可以将“ x”转换为“ y”,如果可以,则将其转换为“ y”。 “ x as!y”强制将x强制转换为y

因此,在您的代码中应检查为? 字符串,因为您似乎以后无论如何都要尝试将其转换为字符串。 所以试试这个:

    if collectionElement != nil{

      if let elementName = collectionElement["elementName"] as? String{
        elementTitle.text = elementName 
      }
           ...

      query.whereKey("fileCollectionElement", equalTo:collectionElement!)
    }

至于索引countElements时的错误,这可能会返回nil值,因此您应确保双方在使用它们的类型上达成共识。 如果countElements包含可选的(PFObject?),请确保cell.collection元素也是可选的(PFObject?)。

在Swift中,具有相同的确切类型至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM