MKMapItem 地标在 swift 中不可用
Posted
技术标签:
【中文标题】MKMapItem 地标在 swift 中不可用【英文标题】:MKMapItem placemark is unavailable in swift 【发布时间】:2014-12-02 14:54:30 【问题描述】:我目前正在尝试制作一个搜索栏,可以在用户键入时自动填充位置。我正在使用 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)
有人知道访问地标的解决方法吗?
谢谢!
【问题讨论】:
【参考方案1】:response.mapItems
数组在 API 中声明为 [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
属性)。
这行很可能应该被删除。
【讨论】:
以上是关于MKMapItem 地标在 swift 中不可用的主要内容,如果未能解决你的问题,请参考以下文章
在随机颜色数组中替换属性 CGColorGetComponents(在 swift 4 中不可用)
在 Swift 中将 CLLocation 转换为 MKMapItem
CGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZero 在 Swift 中不可用
“MKMapItem”类型的值在 Swift 3 中没有成员“网站”