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