使用以下Swift代码,我需要输出5 / hhhh的值。首先,在“ var hhhh:Int = 0”处将hhhh设置为零,然后在“ getObjectInBackgroundWithId”块内,将hhhh的值通过“ hhhh = appleCount [“ count”]]更新为!刚从Parse查询。接下来,我需要以某种方式在“ getObjectInBackgroundWithId”块之外访问hhhh的更新值,并打印以下值“ print(5 / hhhh)”,但是,hhhh的值在这一行上仍然为零,而我正在做NAN此操作。 osteven请给我一些有关为什么此时hhhh的值为零的提示:

Local and Global variables in Swift

但是,我还没有办法以某种方式将hhhh的更新值传输到“ getObjectInBackgroundWithId”块的外部,并在“ print(5 / hhhh)”处使用该值而不是零。非常感谢您提供任何帮助或提示以实现此目标

import UIKit
import Parse
class NewsPageViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad(
var hhhh:Int = 0
var tttt:Int = 0
var cccc:Int = 1

if cccc == 1 {
    var query = PFQuery(className: "Count")
    query.getObjectInBackgroundWithId("RhC25gVjZm", block: { (object: PFObject?, error: NSError?) -> Void in
        if error != nil {
            print(error)
        } else if let appleCount = object {
            appleCount["count"] = appleCount["count"] as! Int + 1
            hhhh = appleCount["count"] as! Int
            appleCount.saveInBackground()
        }
    })
}
print(5/hhhh)


}

最佳答案

在我看来,您已经得到的答案很好地说明了该问题,我将尝试对问题进行改写,以帮助您了解如何解决该问题。

getObjectInBackgroundWithId函数在与当前正在运行的print(5 / hhhh)语句不同的时间运行块。

因此,值“ hhhh”正在更新,但是您尝试在getObjectInBackgroundWithId中的块有时间运行和更新之前在print语句中调用hhhh值。

换一种说法,

print(5/hhhh)


在执行此代码块之前发生(由于后台线程的性质),

query.getObjectInBackgroundWithId("RhC25gVjZm", block: { (object: PFObject?, error: NSError?) -> Void in
    if error != nil {
        print(error)
    } else if let appleCount = object {
        appleCount["count"] = appleCount["count"] as! Int + 1
        hhhh = appleCount["count"] as! Int
        appleCount.saveInBackground()
    }
})


一旦知道hhhh变量已被更新,就可以利用它的一种方法是创建一个函数来使用(在您的情况下为print)该变量并在块中调用它,如下所示:

示例代码:

func doSomethingWithHHHH(){
  print(5/hhhh)
}

query.getObjectInBackgroundWithId("RhC25gVjZm", block: { (object: PFObject?, error: NSError?) -> Void in
        if error != nil {
            print(error)
        } else if let appleCount = object {
            appleCount["count"] = appleCount["count"] as! Int + 1
            hhhh = appleCount["count"] as! Int
    //HERE YOU CALL ON THE FUNCTION TO USE THE VARIABLE
            doSomethingWithHHHH()
            appleCount.saveInBackground()
        }
    })


在此示例中,print语句应该起作用,因为在调用函数以使用“ hhhh”变量之前,该变量已在块中更新。

07-24 18:47