我目前正在尝试制作一个随用户输入自动填充位置的搜索栏。我正在使用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循环未明确表示resMKMapItem类型(或者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属性)。

该行最有可能被删除。

10-08 05:50