Широта и долгота от MKMapItem в Swift?
С помощью MKLocalSearchRequest()
Я получаю массив MKMapItem
,
Все, что мне нужно, это широта и долгота от пункта. Кажется, это должно быть легко.
let search = MKLocalSearch(request: request)
search.startWithCompletionHandler { (response, error) in
for item in response.mapItems {
}
}
я пытался println(item.latitude)
, Консольный вывод nil
,
С помощью item.placemark
чтобы получить широту / долготу, кажется, не вариант, потому что 'placemark' is unavailable: APIs deprecated as of iOS 7 and earlier are unavailable in Swift
Почему item.latitude
ноль? Почему я не могу добраться до placemark
?
Консольный вывод для println(item)
это что-то вроде этого:
<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";
}
Я могу видеть широту и долготу прямо там! Почему я не могу получить это?
2 ответа
response.mapItems
массив объявлен в API как тип [AnyObject]!
,
Цикл for явно не говорит, что res имеет тип MKMapItem
(или это response.mapItems
на самом деле [MKMapItem]
).
Таким образом, res рассматривается как экземпляр AnyObject, который не определен как имеющий свойство метки.
Вот почему вы получаете ошибку компилятора placemark
' недоступен....
Чтобы это исправить, бросьте res
как MKMapItem
и тогда свойство метки станет видимым.
Используйте этот код для получения placemark
for res in response.mapItems {
if let mi = res as? MKMapItem {
self.userSearch.append(mi.placemark)
}
}
Кроме того, эта строка после for
цикл:
self.userSearch = response.mapItems.placemark
Для получения дополнительной информации обратитесь к этому ответу.
Попробуйте эту ссылку, я надеюсь, что работа для вас:
http://www.ioscreator.com/tutorials/searching-map-view-ios8-swift