Swift 2.0 中的自定义 PFQuery 和 PFObject 连接

Custom PFQuery and PFObject Connection in Swift 2.0

我为 PFQueryPFObject 创建了一个自定义 class,我只是 Inherit/extend 那些 class 就不必了担心在我使用查询或对象的任何地方导入 Parse。

但是,我在尝试将 PFQueryPFObject 与其自定义 class.

混合时遇到了问题

这是我的自定义 类,理论上它现在应该具有与 PFObjectPFQuery 相同的属性和效果,它们在大多数情况下都是如此。

class CustomQuery: PFQuery {
    override init(className:String) {
        super.init(className: className)
    }
}

class CustomObject: PFQbject {
    override init(className:String) {
        super.init(className: className)
    }
}

但是我在尝试使用查询中的“..InBackgroundWithBlock”函数时遇到了问题。这是代码:

func GetAsyncObjects(query:CustomQuery, closure: (dataObjects:[CustomObject]) -> ()) {
    query.findObjectsInBackgroundWithBlock {(returnedObjects:[CustomObject]!, error:NSError?) -> Void in
        closure(dataObjects: returnedObjects!)
    }
}

错误发生在上面块的第二行,在 "returnedObjects:[CustomObject]!" 处,错误如下:

Cannot convert value of type '([CustomObject]!, NSError?) -> Void' to expected argument type 'PFQueryArrayResultBlock?'

我实在找不到解决方案。显然,将那里的 CustomObject 更改为 PFObject 会起作用,但这使我的 CustomObject 和 CustomQuery 的全部意义都过时了。

谢谢!

可能不是这里的核心问题,而是来自 PFQbjectCustomObject 子类(请注意 'Q' 而不是 'O')。此外,您还需要在 GetAsyncObjects 函数的闭包中使用 PFObject,因为块的签名期望返回的对象是 [PFObject]? 类型。您可以通过执行以下操作来规避此问题:

// in CustomQuery class
func GetAsyncObjects(closure: (dataObjects:[CustomObject]) -> ()) {
    self.findObjectsInBackgroundWithBlock {(returnedObjects:[PFObject]?, error:NSError?) -> Void in
        // explicitly cast to your custom object
        closure(dataObjects: returnedObjects as! [CustomObject])
    }
}

因此,为了让闭包返回一个 CustomObjects 数组,您可以将从 Parse 返回的 [PFObject]? 数据转换为您想要的数组类型,在这种情况下 [CustomObject]