Пользовательское соединение 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],

Другие вопросы по тегам