2014-07-11 24 views
16

w Objective-C ten kod działa poprawnie wykreślić adres i stwierdzi, długości i szerokości geograficznej koordynuje:Jak wykreślić adresy w Swift, przekształcając adres na współrzędne długości i szerokości geograficznej?

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

I zostały poszukiwania przez kilka dni, jak to zrobić z Swift ?! Czy ktoś może wskazać mi właściwy kierunek? Czy możesz wyjaśnić, czy użytkownik potrzebuje połączenia z Internetem, aby to zadziałało. Przepraszam, jeśli te pytania brzmią trochę prosto, ale jestem całkiem nowy i uczę się każdego dnia.

Rozumiem, że muszę użyć tego kodu, ale nie może znaleźć sposób, aby realizować to

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

Odpowiedz

27

Spróbuj coś

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

Dzięki za odpowiedź, ale za e oznaczenia miejsc: [AnyObject]! daje błąd. @kviksilver – agf119105

+1

Wymień tę linię z: geocoder.geocodeAddressString (adres, {(oznaczenia miejsc: AnyObject [] !, błąd: NSError) -> Pustki w jeśli używasz beta <3 – kviksilver

+0

Wyjątkowy, dzięki który działa !! ! – 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

powinieneś naprawdę rozważyć użycie końcówek linii ';' – davidkonrad

+0

@MirekE Dziękujemy za odpowiedź, ale po uruchomieniu daje błąd i nic nie jest drukowane na mapie – 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 
     } 
    })