Swift 即使变量在类之后声明,也无法访问查询函数外部的变量

Swift 即使变量在类之后声明,也无法访问查询函数外部的变量,swift,parse-platform,Swift,Parse Platform,我运行了一些查询,将带有数据的变量从解析服务器加载到在类的正下方声明的变量中。当我将变量打印到查询函数内的控制台时,它会正确打印,但当我在函数外调用它或打印它时,它是空的。知道我哪里出错了吗 变量声明: class AddTaskViewController: UIViewController, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate { var varCost = "" 查询加载变量: let var

我运行了一些查询,将带有数据的变量从解析服务器加载到在类的正下方声明的变量中。当我将变量打印到查询函数内的控制台时,它会正确打印,但当我在函数外调用它或打印它时,它是空的。知道我哪里出错了吗

变量声明:

class AddTaskViewController: UIViewController, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate {
var varCost = ""
查询加载变量:

let varCostQuery = PFQuery(className: "Class1")
varCostQuery.findObjectsInBackground(block: { (objects, error) in
    if error != nil {
        print(error!)
    } else {
        varCostQuery.whereKey("Header", equalTo: self.HeaderSelection.text)
        varCostQuery.findObjectsInBackground(block: { (objects, error) in
            for object in objects! {
                self.varCost = object["pricePerUnit"] as! String
                print(self.varCost) //Option1
            }
        })
    }
})
print(varCost) //Option2

当我打印Option1时,我得到的数据与我要查找的数据完全相同,但当我打印Option2或尝试在此级别使用
varCost
变量时,我得到的是
“”
就像变量从未更新过一样。

发生这种情况是因为传递给
findObjectsInBackground
方法的代码是在找到所有对象后才运行的代码

因为只有在找到对象时才会调用此代码,这可能需要一些时间,所以将此代码发送到后台队列以等待找到对象

但是,我们不希望代码的其余部分暂停并等待它!那会使我们的节目慢很多。因此,程序将继续通过此块,直到完成。这就是为什么选项2是空的,因为
findObjectsInBackground
还没有时间获取对象,所以代码直接跳到了选项2所在的位置

当最终找到对象时,调用代码块并打印选项1


这意味着您只能确保
self.varCost
在此块中具有正确的值(或Swift中所称的闭包)。

Ah这是有意义的。有没有关于如何修复的建议?在最后一次查询后,我可以暂停1秒的时间来进行更改,这可能不会对UX造成太大影响,但我很乐意考虑更好的选择。@ TMCGEE投入1秒的暂停不是好的做法,因为我们不知道这个对象的查找要花多长时间。最好从块内部调用带有
self.varCost
作为参数的函数,这样您就可以在此函数中使用
self.varCost
执行任何操作,并且您100%确定它是正确的值。是否有指向示例的链接?听起来比静态停顿好得多。我试着暂停一下,看看是否能让它暂时解决这个问题,但它仍在打印“”/