Пользовательское соединение PFQuery и PFObject в Swift 2.0
Я создал класс Custom для обоих PFQuery
а также PFObject
где я просто наследую / расширяю эти классы, чтобы не волноваться об импорте Parse везде, где я использую Query или Object.
Тем не менее, я столкнулся с проблемой при попытке смешать PFQuery
а также PFObject
вместе с их пользовательским классом.
Вот мои пользовательские классы, которые в теории теперь должны иметь те же свойства и эффекты, что и 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!)
}
}
Ошибка происходит во второй строке блока выше, в "returnObjects:[CustomObject]!" со следующей ошибкой:
Не удается преобразовать значение типа '([CustomObject]!, NSError?) -> Void "в ожидаемый тип аргумента" PFQueryArrayResultBlock? "
Я буквально не могу найти решение этой проблемы. Очевидно, что там меняют CustomObject PFObject
будет работать, но это делает весь смысл моих CustomObject и CustomQuery устарел.
Спасибо!
1 ответ
Вероятно, не основная проблема здесь, но ваш CustomObject
подклассы из PFQbject
(Обратите внимание, что вместо буквы "О" стоит "Q"). Также вам нужно будет использовать PFObject
в закрытии внутри GetAsyncObjects
функция, потому что подпись блока ожидает, что возвращаемые объекты будут иметь тип [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
назад, вы можете просто разыграть [PFObject]?
данные, которые вы возвращаете из Parse в нужный тип массива, в данном случае [CustomObject]
,