为什么.geocodeAddressString不会更改外部变量?

时间:2016-05-11 15:26:05

标签: ios swift mapkit core-location

我有一个外部变量chooseCoordinates,它有一种CLLocationCoordinate2D。这个var需要保存geocodeAddressString闭包的坐标,但显然它不会改变。

我想征求意见,如何让这个实际的闭包存储数据,所以我将能够将它解析为另一个viewController

var chooseCoordinates = CLLocationCoordinate2D()
////////////

let geocoder = CLGeocoder()

    geocoder.geocodeAddressString(sender.text!, completionHandler: { (placemarks, error) -> Void in

        if(error != nil) {
            print("\(error)")
        }

        if let placemark = placemarks?.first {
            let coordinates: CLLocationCoordinate2D = placemark.location!.coordinate
            self.chooseCoordinates = coordinates
        }
    })

1 个答案:

答案 0 :(得分:0)

geocodeAddressString以异步方式运行(即使该方法立即返回,可以稍后调用其completionHandler闭包)。那么,您确定它没有改变,或者只是在您尝试使用chooseCoordinates时没有改变?您应该在闭包(或didSet的{​​{1}})内启动UI或其他任何更新,而不是立即更新。我们不知道你是如何使用chooseCoordinates的,所以很难比这更具体。

例如:

chooseCoordinates

或者,您可以自己使用geocoder.geocodeAddressString(sender.text!) { placemarks, error in if error != nil { print(error!) } if let placemark = placemarks?.first { let coordinates: CLLocationCoordinate2D = placemark.location!.coordinate self.chooseCoordinates = coordinates // call the method that uses `chooseCoordinates` here } } // don't try to use `chooseCoordinates` here, as it hasn't been set yet. 模式:

completionHandler