解析服务器 // findObjectsInBackgroundWithBlock // 数组

Parse Server // findObjectsInBackgroundWithBlock // Array

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 周)的新手,我正在构建一个应用程序以娱乐和学习。

我的解析函数 findObjectsInBackgroundWithBlockArray 有问题。完成我的功能后,会给我一个带有初始值的数组。在函数内部,我可以看到添加到数组中的值。

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
    }
}

有什么想法吗? + 抱歉这个初学者问题。

您需要将 closures 与您的函数一起使用,因为您要使 blockblock 将以 async 方式工作,因此您需要声明您的函数使用 closure 然后 return 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)
}