MKMapItem地标在swift中不可用

时间:2014-12-02 14:54:30

标签: ios swift mapkit

我目前正在尝试创建一个搜索栏,以用户键入的方式自动填充位置。我正在使用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 个答案:

答案 0 :(得分:4)

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属性)。

最有可能删除此行。