简体   繁体   中英

Latitude and longitude from MKMapItem in Swift?

Using MKLocalSearchRequest() I get an array of MKMapItem .

All I need is the latitude and longitude from the item. It seems like it should be easy.

let search = MKLocalSearch(request: request)
search.startWithCompletionHandler { (response, error) in
    for item in response.mapItems {

    }
}

I have tried println(item.latitude) . The console output is nil .

Using item.placemark to get the lat/longitude doesn't seem to be an option either because 'placemark' is unavailable: APIs deprecated as of iOS 7 and earlier are unavailable in Swift

Why is item.latitude nil? Why can't I reach into placemark ?

The console output for println(item) is something like this:

<MKMapItem: 0x17086a900> {
isCurrentLocation = 0;
name = "Random University";
phoneNumber = "+1000000000";
placemark = "Random University, 400 Address Ave, City, NJ  01010-0000, United States @ <+34.74264816,-84.24657106> +/- 0.00m, region CLCircularRegion (identifier:'<+34.74279563,-84.24621513> radius 514.96', center:<+34.74279563,-84.24621513>, radius:514.96m)";
url = "http://www.shu.edu";
}

I can see the latitude and longitude right there! Why can't I get it?

The response.mapItems array is declared in the API as of type [AnyObject]! .

The for loop isn't explicitly saying that res is of type MKMapItem (or that response.mapItems is actually [MKMapItem] ).

So res is treated like an instance of AnyObject which isn't defined as having a placemark property.

This is why you get the compiler error ' placemark ' is unavailable....

To fix this, cast res as an MKMapItem and then the placemark property will become visible.

Use this code for getting placemark

for res in response.mapItems {
    if let mi = res as? MKMapItem {
        self.userSearch.append(mi.placemark)
    }
}

Also, this line after the for loop:

self.userSearch = response.mapItems.placemark

For more Info refer THIS answer.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM