geocoder.geocodeAddressString no longer works with swift update today

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

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

shows that there were a couple of changes

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

to:

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

my code was:

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)     } }) 

tried:

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) }) 

it just keeps saying that its not allowed. tried a few different combinations. this is do to the latest update to xcode / swift

thanks in advance

回答1:

Use geocodeAddressString this way:

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

And it will work fine.



回答2:

In Swift 2:

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

In Swift 3, replace NSError? with Error?:

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

Or, easier, just let it infer the correct types for you:

geocoder.geocodeAddressString(address) { placemarks, error in  } 


回答3:

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

Just change NSError to Error and will it work



回答4:

This no longer works....

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

throws an EXC error



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!