如何使用Swift中block outside block定义的全局变量值?

how to use the global variable value defined in block outside block in Swift?

我有一个全局定义的变量,当在 self.lastReading 的块内访问时,它没有获取块中定义的值。如何获取块中定义的值?

var lastReading = 0

Query.getFirstObjectInBackgroundWithBlock(

{(data:PFObject?,error:NSError?) -> Void in

var dataEntry = data!

var Reading: AnyObject! = dataEntry["reading"]!

self.lastReading = Reading.integerValue
})

编辑:lastReading 变量是 class.

中定义的全局变量

看起来像:

var lastReading = 0

在 class 中定义(最好添加上下文代码以了解它的定义位置)。如果是这种情况,您可能正在不同的线程中执行您的块/闭包。所以:

  1. 你设置 lastReading = 0
  2. 您在另一个线程中启动了一些耗时的任务。主线程(或线程 运行 该代码)立即继续执行。在块的末尾,您分配 lastReading.
  3. 如果您在块之后检查 lastReading,没有任何变化。仍然 == 0。那是因为 Main 线程立即执行并且 lastReading 没有改变。

我最好调用一个方法来更新块末尾的 lastReading:

var lastReading = 0

Query.getFirstObjectInBackgroundWithBlock(

    {(data:PFObject?,error:NSError?) -> Void in

    var dataEntry = data!

    var Reading: AnyObject! = dataEntry["reading"]!

    self.updatelastReading(Reading.integerValue)
})