在 swift 中从闭包中获取数据

Getting data out of a closure in swift

我在解析中进行了查询并获取了一组 GeoPoint 坐标。这是在闭包内完成的。我只能访问该闭包内的数组值。我需要能够使用这些值,以便它们可以用作地图上的注释,但我无法访问它们。有人能告诉我如何从闭包中获取数组值吗?

代码:

var user = PFUser.currentUser()
user["location"] = geopoint

var query = PFUser.query()
query.whereKey("location", nearGeoPoint:geopoint)
query.limit = 10
query.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]!, error: NSError!) -> Void in

    for object in objects {

        var user:PFUser = object as PFUser
        var otherUsersCoord = [PFGeoPoint]()
        otherUsersCoord.append(user["location"] as PFGeoPoint)

        println("The other users coords are: \(otherUsersCoord)")
    }

})}

你通常会这样做:

如果闭包在某个帮助程序 class 的方法中,则向其传递一个将数组作为参数的完成块参数。调用完成块时,将数组存储为实例变量(并触发对 UI 的更新)或创建注释并将它们设置到地图视图中(这将是一个实例变量)。

如果闭包在您的 class 上拥有地图视图的方法中,那么您可以跳过完成块部分,直接处理数组以更新您的实例变量/地图。

otherUsersCoord 声明为闭包表达式外的 var,而不是在闭包表达式内。当它被分配到闭包内时,该更改将反映在闭包外的变量中。这就是所谓的“捕获”otherUsersCoord。捕获外部上下文使闭包不仅仅是函数。

但是请注意,在变量具有您决定的值之前,您仍然需要等待闭包实际 运行。它不会立即同步可用。此外,捕获外部变量使它们保持活动状态,偶尔会导致循环引用和类似问题(这就是为什么有时当您引用成员变量或函数时会收到有关“捕获自身”的警告)。