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 今天不再适用于快速更新的主要内容,如果未能解决你的问题,请参考以下文章