从[PFObject]中倒霉?到 [PFObject] 仅解开包装选项,您的意思是使用"!"



我在Xcode中出现一个错误,说从"[PFObject]?"到"[PFObject]"的Downcast只能解开可选包;你的意思是使用"!"吗?

    var iDArray = [String]()
var nameArray = [String]()
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let ObjectIDQuery = PFQuery(className: "Songs")
    ObjectIDQuery.findObjectsInBackgroundWithBlock({
        (objectsArray: [PFObject]?, error: NSError?) -> Void in

        var objectIDs = objectsArray as! [PFObject]
        for i in 0...objectIDs.count{
            self.iDArray.append(objectIDs[i].valueForKey("objectID") as! String)
            NSLog("(objectIDs)")

Xcode 文件映像

在这种情况下最好

使用 guard。下面的代码将安全地解开可选objectsArray,如果可选nil,它将不会执行进一步的代码。你也可以把这部分代码写得更漂亮一点:)

ObjectIDQuery.findObjectsInBackgroundWithBlock() { (objectsArray: [PFObject]?, error: NSError?) -> Void in
        guard let objectIDs = objectsArray else { return }
        self.iDArray += objectIDs.map { $0.valueForKey("objectID") as! String }
}

您可能确实想使用"!"。更改此行:

var objectIDs = objectsArray as! [PFObject]

对此:

var objectIDs = objectsArray!

由于您只是解开数组包装,因此无需强制转换它。

此消息表示不需要向下转换,因为编译器知道[PFObject]?的类型 - 如您在块签名中看到的那样。

推荐的方法是首先处理错误。如果为 nil,您可以安全地解开可选的包装

ObjectIDQuery.findObjectsInBackgroundWithBlock({
    (objectsArray: [PFObject]?, error: NSError?) -> Void in
    if error != nil {
     // handle the error
    } else {
      for anObject in objectsArray! {
         self.iDArray.append(anObject["objectID"] as! String)
      }
    }

相关内容

最新更新