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