如何在Swift中绘制地址,将地址转换为经度和纬度坐标?

agf*_*105 16 geocoding objective-c mkmapview swift

在Objective-C中,此代码可以很好地绘制地址并找到经度和纬度坐标:

     NSString *address = @"1 Infinite Loop, CA, USA";
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:address 
             completionHandler:^(NSArray* placemarks, NSError* error){
                 // Check for returned placemarks
                 if (placemarks && placemarks.count > 0) {
                     CLPlacemark *topResult = [placemarks objectAtIndex:0];
                     // Create a MLPlacemark and add it to the map view
                     MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
                     [self.mapView addAnnotation:placemark];
                     [placemark release];
                 }
                 [geocoder release];
             }];
Run Code Online (Sandbox Code Playgroud)

我一直在寻找使用Swift如何做到这一点的日子?!有人能指出我正确的方向吗?你能解释一下,如果用户需要互联网连接才能使用.对不起,如果这些问题听起来有点基础,但我对此很新,每天都在学习.

我知道我必须使用此代码,但无法找到实现它的方法

func geocodeAddressString(_ addressString: String!,
    completionHandler completionHandler: CLGeocodeCompletionHandler!)
Run Code Online (Sandbox Code Playgroud)

rea*_*mez 38

XCode 9和Swift 3:

import CoreLocation

let address = "1 Infinite Loop, CA, USA"
let geocoder = CLGeocoder()

geocoder.geocodeAddressString(address, completionHandler: {(placemarks, error) -> Void in
   if((error) != nil){
      print("Error", error)
   }
   if let placemark = placemarks?.first {
      let coordinates:CLLocationCoordinate2D = placemark.location!.coordinate
      }
    })
Run Code Online (Sandbox Code Playgroud)


kvi*_*ver 27

尝试类似的东西

var address = "1 Infinite Loop, CA, USA"
var geocoder = CLGeocoder()
geocoder.geocodeAddressString(address, {(placemarks: [AnyObject]!, error: NSError!) -> Void in
    if let placemark = placemarks?[0] as? CLPlacemark {
        self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
    }
})
Run Code Online (Sandbox Code Playgroud)