如何使用Swift中块外块中定义的全局变量值?

时间:2015-04-21 05:30:05

标签: swift parse-platform block

我有一个全局定义的变量,当使用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变量是在类中定义的全局变量。

1 个答案:

答案 0 :(得分:2)

看起来像:

var lastReading = 0

在类中定义(更好地添加上下文代码以了解它的定义)。如果是这种情况,您可能正在另一个线程中执行块/闭包。所以:

  1. 你设置lastReading = 0
  2. 你在另一个线程中启动了一些耗时的任务。主线程(或运行该代码的线程)立即继续执行。在块结束时,您指定lastReading。
  3. 如果您在阻止之后检查lastReading,则不会更改。仍然== 0.这是因为主线程立即执行而lastReading没有改变。
  4. 我最好调用一个方法来更新块末尾的lastReading:

    var lastReading = 0
    
    Query.getFirstObjectInBackgroundWithBlock(
    
        {(data:PFObject?,error:NSError?) -> Void in
    
        var dataEntry = data!
    
        var Reading: AnyObject! = dataEntry["reading"]!
    
        self.updatelastReading(Reading.integerValue)
    })