快速从封闭中获取数据

我已经做了一个查询parsing并获取一个GeoPoint坐标数组。 这是在closures内完成的。 我只能访问该闭包内的数组值。 我需要能够使用这些值,以便他们可以用作地图上的注释,但我不能去他们。 有人可以告诉我如何从闭包中获取数组值。

码:

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

otherUsersCoord声明为封闭expression式外部的一个otherUsersCoord ,而不是在其内部。 当它被分配到闭包内时,该变化将反映在闭包外的variables中。 这被称为“夺取”其他用户otherUsersCoord 。 捕获外部环境使闭包不仅仅是function。

但是要小心,在variables具有你决定的价值之前,你仍然需要等待闭包的实际运行。 它不会立即同步可用。 另外,捕获外部variables会使它们保持活跃状态​​,并且偶尔会导致循环引用和类似的问题(这就是为什么有时当您引用成员variables或函数时会得到关于“捕获自己”的警告)。

你通常会做这样的事情:

如果闭包在某个辅助类的方法中,则传递一个完成块参数,该参数将该数组作为参数。 当完成块被调用时,将数组存储为一个实例variables(并触发对UI的更新),或创build注释并将其设置到您的地图视图(这将是一个实例variables)。

如果闭包是在拥有地图视图的类的方法中,那么你可以跳过完成块部分,直接处理数组来更新实例variables/地图。