Swift 2.0 中的自定义 PFQuery 和 PFObject 连接
Custom PFQuery and PFObject Connection in Swift 2.0
我为 PFQuery
和 PFObject
创建了一个自定义 class,我只是 Inherit/extend 那些 class 就不必了担心在我使用查询或对象的任何地方导入 Parse。
但是,我在尝试将 PFQuery
和 PFObject
与其自定义 class.
混合时遇到了问题
这是我的自定义 类,理论上它现在应该具有与 PFObject
和 PFQuery
相同的属性和效果,它们在大多数情况下都是如此。
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 的全部意义都过时了。
谢谢!
可能不是这里的核心问题,而是来自 PFQbject
的 CustomObject
子类(请注意 '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])
}
}
因此,为了让闭包返回一个 CustomObject
s 数组,您可以将从 Parse 返回的 [PFObject]?
数据转换为您想要的数组类型,在这种情况下 [CustomObject]
。
我为 PFQuery
和 PFObject
创建了一个自定义 class,我只是 Inherit/extend 那些 class 就不必了担心在我使用查询或对象的任何地方导入 Parse。
但是,我在尝试将 PFQuery
和 PFObject
与其自定义 class.
这是我的自定义 类,理论上它现在应该具有与 PFObject
和 PFQuery
相同的属性和效果,它们在大多数情况下都是如此。
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 的全部意义都过时了。
谢谢!
可能不是这里的核心问题,而是来自 PFQbject
的 CustomObject
子类(请注意 '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])
}
}
因此,为了让闭包返回一个 CustomObject
s 数组,您可以将从 Parse 返回的 [PFObject]?
数据转换为您想要的数组类型,在这种情况下 [CustomObject]
。