Мой запрос к Parse теперь вызывает ошибку быстрого компилятора в Xcode 6 beta6 (см. ошибку ниже). Раньше он работал нормально (и мой пример прост и взят из документации Parse). Я изменил одну вещь из Xcode 6 beta 6: с "objects: AnyObject []!" на "объекты: [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 предложил приведение вниз к PFObject, в то время как понижение относится к «объектам», массиву):
for object : PFObject! in objects as [PFObject] {
...
}
ОБНОВЛЕНО ПРАВИЛЬНЫЙ ОТВЕТ для времени выполнения
Приведенный выше ответ исправлял проблему с компилятором, а не с выполнением. После общения с ребятами из Parse выяснилось, что их документация не актуальна, поскольку вышла бета-версия 6. Чтобы зациклить объекты PFObjects, возвращенные из запроса, просто выполните «для объекта в объектах {}»:
query.findObjectsInBackgroundWithBlock {
(objects: [PFObject]!, error: NSError!) -> Void in
if (error == nil) {
for object in objects {
...
} ...
}