来自[PFObject]的垂头丧气?到[PFObject]只打开选项,你的意思是用“!”

时间:2016-03-12 18:26:48

标签: arrays xcode swift pfobject

我在Xcode中出现错误,说“[PFObject]”中的Downcast? '[PFObject]'只展开选项;你的意思是用“!”吗?

    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 file image

3 个答案:

答案 0 :(得分:2)

在这种情况下最好使用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 }
}

答案 1 :(得分:0)

你可能意味着使用“!”。改变这一行:

var objectIDs = objectsArray as! [PFObject]

到此:

var objectIDs = objectsArray!

由于您只是展开数组,因此无需进行转换。

答案 2 :(得分:0)

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

推荐的方法是首先处理错误。如果它没有,你可以安全地打开可选的

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)
      }
    }