MKMapItem的地标在Swift中不可用。

4

我目前正在尝试制作一个搜索栏,当用户输入时自动填充位置。我使用MKLocalSearch获取一个MKLocalSearchResponse,并且它似乎返回了可以使用的值。但是,要从搜索中获取名称、地址或坐标,需要访问搜索响应中的MKPlacemark属性。当我访问placemark时,会出现以下错误:

'placemark'不可用:在Swift中,API已被iOS7及更早版本弃用

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个回答

4

response.mapItems数组在API中被声明为类型[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属性)。
最有可能删除这一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接