5

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

Jason G
  • 2,395
  • 2
  • 24
  • 34

4 Answers4

10

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

}
Rob
  • 415,655
  • 72
  • 787
  • 1,044
7

Use geocodeAddressString this way:

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

})

And it will work fine.

Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165
2
geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in

})

Just change NSError to Error and will it work

egor.zhdan
  • 4,555
  • 6
  • 39
  • 53
JP Quintao
  • 21
  • 1
2

This no longer works....

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

throws an EXC error

jimijon
  • 2,046
  • 1
  • 20
  • 39