我试图通过segue获取从一个视图控制器传递到另一个视图控制器的地址坐标。获取坐标的地理编码功能以异步方式运行,因此我使用完成块来捕获坐标值。
编辑:点击按钮 -
即可触发以下功能func getCoordinates(completion: (coordinates)) -> () {
geocoder.geocodeAddressString(address) { (placemarks, error) -> Void in
if((error) != nil) {
print("Error", error)
}
if let placemark = placemarks?.first {
let coordinates: CLLocationCoordinate2D = placemark.location!.coordinate
completion(coordinates)
}
}
}
我尝试做的是将坐标传递给下一个视图控制器 AFTER 他们已经获得。我怀疑我可以用prepareForSegue和GCD做到这一点,但我可能错了......
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showCoordinates" {
if let nextVC = segue.destinationViewController as? NextViewController {
// What goes here?
}
}
}
可以使用一些帮助/建议。提前谢谢。
答案 0 :(得分:0)
在NextViewController
上创建一个属性以接受该数据并将其分配给目标视图控制器:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showCoordinates" {
if let nextVC = segue.destinationViewController as? NextViewController {
nextVC.coordinates = coordinates
}
}
}
答案 1 :(得分:0)
func getCoordinates(completion: (coordinates)) -> () {
geocoder.geocodeAddressString(address) { (placemarks, error) -> Void in
if((error) != nil) {
print("Error", error)
}
if let placemark = placemarks?.first {
let coordinates: CLLocationCoordinate2D = placemark.location!.coordinate
completion(coordinates)
self.performSegueWithIdentifier("showCoordinates", sender: coordinates)
}
}
}
在您的prepareForSegue
方法中,您可以将发件人对象转换为CLLocationCoordinate2D
对象,并将其分配给您的nextViewController CLLocationCoordinate2D
变量。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showCoordinates" {
if let nextVC = segue.destinationViewController as? NextViewController {
nextVC.coordinates = sender as! CLLocationCoordinate2D
}
}
}