我现在向Parse发出的查询在Xcode 6 beta6中引发了Swift编译器错误(请参见下面的错误)。之前它一直正常工作(我的示例很简单,来自Parse的文档)。我从Xcode 6 beta 6中改变了一个东西:“objects: AnyObject[]!”变成了“objects:[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
如果我将objects: [AnyObject]!更改为objects: [PFObject]!,我会得到以下错误:
query.findObjectsInBackgroundWithBlock {
(objects: [PFObject]!, error: NSError!) -> Void in
if !(error != nil) {
for object : PFObject! in objects {
// 错误: AnyObject与PFObject不相同
修复编译问题的答案
正确答案如下(Xcode建议将downcast应用于"objects"数组,而不是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 {
...
} ...
}