一尘不染

快速从封闭中获取数据

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)")
    }

})}

阅读 210

收藏
2020-07-07

共1个答案

一尘不染

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

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

2020-07-07