2014-07-11 9 views
16

Trong Objective-C mã này hoạt động tốt để vẽ một địa chỉ và nó tìm kinh độ và vĩ độ phối:Làm thế nào tôi có thể vẽ địa chỉ trong Swift, chuyển đổi địa chỉ thành kinh độ và vĩ độ?

 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]; 
      }]; 

Tôi đã được tìm kiếm trong nhiều ngày về cách để làm điều này với Swift ?! Ai có thể chỉ cho tôi đi đúng hướng? Bạn có thể giải thích nếu người dùng cần kết nối internet để điều này hoạt động. Xin lỗi nếu những câu hỏi này có vẻ hơi cơ bản, nhưng tôi khá mới mẻ với điều này và học mỗi ngày.

Tôi hiểu rằng tôi phải sử dụng mã này, nhưng không thể tìm thấy một cách để thực hiện nó

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

Trả lời

27

Hãy thử một cái gì đó giống như

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

Cảm ơn câu trả lời, nhưng dấu vị trí điện tử: [AnyObject]! đưa ra một lỗi. @kviksilver – agf119105

+1

Thay thế dòng đó với: geocoder.geocodeAddressString (địa chỉ, {(dấu vị trí: AnyObject [] !, lỗi:! NSError) -> Void trong nếu bạn đang chạy phiên bản beta <3 – kviksilver

+0

tuyệt vời, nhờ đó hoạt động !! ! – agf119105

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

geocoder.geocodeAddressString(address) { 
    if let placemarks = $0 { 
     println(placemarks) 
    } else { 
     println($1) 
    } 
} 
+0

bạn thực sự nên xem xét sử dụng kết thúc dòng ';' – davidkonrad

+0

@MirekE Cảm ơn bạn đã trả lời, nhưng khi nó chạy, nó đưa ra một lỗi và không có gì được vẽ trên bản đồ – agf119105

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 
     } 
    }) 
Các vấn đề liên quan