使用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";
}
我可以在那看到纬度和经度!我为什么不能得到它?
最佳答案
API中声明的response.mapItems
数组的类型为[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
有关更多信息,请参考THIS答案。
关于ios - Swift中MKMapItem的经度和纬度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31445892/