geocoder.geocodeAddressString 今天不再适用于快速更新

Posted

技术标签:

【中文标题】geocoder.geocodeAddressString 今天不再适用于快速更新【英文标题】:geocoder.geocodeAddressString no longer works with swift update today 【发布时间】:2015-09-18 15:04:37 【问题描述】:

https://developer.apple.com/library/prerelease/mac/releasenotes/General/APIDiffsMacOSX10_11/Swift/CoreLocation.html

显示有一些变化

func geocodeAddressString(_ addressString: String!, completionHandler completionHandler: CLGeocodeCompletionHandler!)

到:

func geocodeAddressString(_ addressString: String, completionHandler completionHandler: CLGeocodeCompletionHandler)

我的代码是:

var geocoder = CLGeocoder()

geocoder.geocodeAddressString("\(event!.street), \(event!.city), \(event!.country)", completionHandler: (placemarks: [AnyObject]!, error: NSError!) -> Void in
    if let placemark = placemarks?[0] as? CLPlacemark 
        self.event!.lat = placemark.location!.coordinate.latitude
        self.event!.long = placemark.location!.coordinate.longitude

        self.event!.getMiles(self.currentLocation!.location!.coordinate.latitude, clong: self.currentLocation!.location!.coordinate.longitude)
        var mile = self.event!.miles != nil ? NSString(format: "%.1f miles", self.event!.miles!) : "Location services off"
        self.milesButton.setTitle(mile as String, forState: .Normal)
    
)

试过了:

var geocoder = CLGeocoder()
let address = "\(event!.street), \(event!.city), \(event!.country)"
geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]) in
     let placemark = placemarks[0]
     self.event!.lat = placemark.location!.coordinate.latitude
     self.event!.long = placemark.location!.coordinate.longitude
     self.event!.getMiles(self.currentLocation!.location!.coordinate.latitude, clong: self.currentLocation!.location!.coordinate.longitude)
     var mile = self.event!.miles != nil ? NSString(format: "%.1f miles", self.event!.miles!) : "Location services off"
     self.milesButton.setTitle(mile as String, forState: .Normal)
)

它只是一直说它不允许。尝试了几种不同的组合。这是对 xcode / swift 的最新更新的做法

提前致谢

【问题讨论】:

【参考方案1】:

在 Swift 2 中:

geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]?, error: NSError?) -> Void in

)

在 Swift 3 中,将 NSError? 替换为 Error?

geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]?, error: Error?) -> Void in

)

或者,更简单,让它为您推断正确的类型:

geocoder.geocodeAddressString(address)  placemarks, error in


【讨论】:

【参考方案2】:

这样使用geocodeAddressString

geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]?, error: NSError?) -> Void in

)

它会正常工作的。

【讨论】:

很高兴为您提供帮助..:)【参考方案3】:
geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]?, error: NSError?) -> Void in

)

只需将NSError 更改为Error 就可以了

【讨论】:

【参考方案4】:

这不再有效....

  geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]?, error: NSError?) -> Void in
        print("Test")
     as! CLGeocodeCompletionHandler)

引发 EXC 错误

【讨论】:

以上是关于geocoder.geocodeAddressString 今天不再适用于快速更新的主要内容,如果未能解决你的问题,请参考以下文章