使用以下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”变量之前,该变量已在块中更新。