3

我对 Parse 的查询现在在 Xcode 6 beta6 中引发了一个快速编译器错误(请参阅下面的错误)。它以前工作得很好(我的例子很简单,来自 Parse 的文档)。我已经改变了来自 Xcode 6 beta 6 的一件事:从“objects: AnyObject[]!” 到“对象:[AnyObject]!” (由于错误“数组类型现在用括号括住元素类型”)

query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if !(error != nil) {
            NSLog("Successfully retrieved \(objects.count) objects.")
            for object : PFObject! in objects { ... } ...

//错误:类型 [AnyObject] 不能被隐式向下转换为 'PFObject',你的意思是使用 'as' 强制向下转换吗?

如果我按照前一个错误的建议强制向下转换,我会收到另一个错误:

for object : PFObject! in objects as PFObject {
       ...
}

//错误: PFObject 类型不符合协议 SequenceType

如果我改变对象:[AnyObject]!对象:[PFObject]!我收到以下错误:

query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]!, error: NSError!) -> Void in
        if !(error != nil) {
            for object : PFObject! in objects {

//错误:AnyObject 与 PFObject 不同

解决编译器问题的答案

正确答案如下(Xcode 建议向下转换为 PFObject,而向下转换在“对象”上,一个数组):

for object : PFObject! in objects as [PFObject] {
       ...
}

更新了执行时间的正确答案

上面的答案是修复编译器问题,而不是执行。与 Parse 人员聊天后,他们的文档不是最新的,因为 beta 6 已经发布。要循环从查询返回的 PFObjects 对象,只需执行“for object in objects {}”:

 query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]!, error: NSError!) -> Void in
        if (error == nil) {
           for object in objects {
            ...
            } ...
 }
4

1 回答 1

2

我相信你正试图降低一个数组。如果你改变这个会发生什么:

for object : PFObject! in objects as PFObject {
       ...
}

对此:

for object: PFObject in objects as [PFObject] {
       ...
}

我还想指出,这可能无法达到您的预期:

if !(error != nil) {

括号前面的额外感叹号会产生双重否定,这会使您的意图模棱两可。

更新

正如评论中指出的那样,Parse 建议做一个简单的 for-in 循环,而不需要任何明确的向下转换。

for object in objects {}
于 2014-08-27T14:16:52.710 回答