如何在geocodeAddressString之后通过segue传递数据

时间:2016-02-17 03:28:36

标签: ios swift segue grand-central-dispatch geocoding

我试图通过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?
        }
    }
}

可以使用一些帮助/建议。提前谢谢。

2 个答案:

答案 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
        }
    }
}