我目前正在尝试制作一个随用户输入自动填充位置的搜索栏。我正在使用MKLocalSearch来获取MKLocalSearchResponse,它似乎返回我可以使用的值。但是,要从搜索中获取名称,地址或坐标,需要访问搜索响应中的MKPlacemark属性。访问地标时,出现错误消息:
'placemark'不可用:iOS7及更早版本中不推荐使用的API在Swift中不可用
var request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchText
//PUT HERE: check if network is on?
let localSearch: MKLocalSearch = MKLocalSearch(request: request)
localSearch.startWithCompletionHandler { (response: MKLocalSearchResponse!, error: NSError!) -> Void in
if (error == nil) {
println("searched")
for res in response.mapItems {
self.userSearch.append(res.placemark)
}
self.userSearch = response.mapItems.placemark
self.tableView?.reloadData()
} else {
println(error)
}
}
}
有谁知道访问地标的解决方法?
谢谢!
最佳答案
API中已将response.mapItems
数组声明为[AnyObject]!
类型。for
循环未明确表示res
是MKMapItem
类型(或者response.mapItems
实际上是[MKMapItem]
)。
因此,res
被视为AnyObject
的实例,但没有定义为具有placemark
属性。
这就是为什么您会收到编译器错误'placemark' is unavailable...
的原因。
要解决此问题,请将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
如果
userSearch
应该是一个地标数组,则没有任何意义。for
循环将地标附加到该数组,然后此行将数组设置为单个地标对象(此外,mapItems
对象甚至没有placemark
属性)。该行最有可能被删除。