Parse Server // findObjectsInBackgroundWithBlock // Массив

swift parse-platform swift2 parse-server pfquery

245 просмотра

1 ответ

Parse Server: 2.2.17 (self hosted)  
Parse-SDK-iOS-OSX: 1.14.2  
ParseUI-iOS Version: 1.2.0  
Xcode 7.3.1, Swift

Я новичок в программировании iOS (20 недель) и создаю приложение для развлечения и обучения.

У меня проблема с функцией разбора findObjectsInBackgroundWithBlockи Array. После завершения моя функция выдаст мне массив с начальными значениями. Внутри функции я могу видеть значения, добавленные в массив.

class UserOverview {

    var strings: [String] = ["1", "2", "3"]

    init() {
        userKcal()
    }

    func userKcal() -> [String] {
        let query = PFQuery(className: "StringClassInParse")
        query.whereKey("userPointer", equalTo: PFUser.currentUser()!)
        query.findObjectsInBackgroundWithBlock { (objects, error) in
            if let returnedObjects = objects {
                for object in returnedObjects {
                    let kcal = object["kcal"] as? String
                    self.strings.append(kcal!)
                }
            }
            print(self.strings) // output is ["1", "2", "3", "4", "5", "6"]
        }
        print(self.strings) // output is ["1", "2", "3"]
        return strings
    }
}

Любая идея? + Извините за этот вопрос для начинающих.

Автор: Calvin Orchiz Источник Размещён: 08.11.2019 11:05

Ответы (1)


0 плюса

Решение

Вы должны использовать closuresсвою функцию, потому что вы делаете blockи blockбудете работать в asyncманере, так что вам нужно объявить свою функцию с, closureа затем вернуть Stringмассив с этим closure.

func userKcal(completion: ([String]) -> ()) {
    let query = PFQuery(className: "StringClassInParse")
    query.whereKey("userPointer", equalTo: PFUser.currentUser()!)
    query.findObjectsInBackgroundWithBlock { (objects, error) in
        if let returnedObjects = objects {
            for object in returnedObjects {
                let kcal = object["kcal"] as? String
                self.strings.append(kcal!)
            }
        }
        completion(self.strings)
    }
}

Теперь вызовите эту функцию следующим образом

self.userKcal { (strings) -> () in
     print(strings)
}
Автор: Nirav D Размещён: 20.08.2016 09:11
Вопросы из категории :
32x32