Swift - 坐标不可用 : APIs deprecated as of iOS 7

标签 swift annotations mapkit mkannotation

我正在尝试通过获取 self.mapView.annotations 来遍历注释数组。

我遇到的问题是我收到一个错误,因为坐标不可用:从 iOS 7 及更早版本开始弃用的 API 对 Swift 不可用

有什么办法可以解决这个问题吗?我查看了 iOS 开发人员库,但找不到任何方法来获取每个注释的坐标。

var zoomRect:MKMapRect = MKMapRectNull;

for (index,annotation) in enumerate(self.mapView.annotations) {
    var annotationPoint:MKMapPoint = MKMapPointForCoordinate(annotation.coordinate)
    var pointRect:MKMapRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1);
    zoomRect = MKMapRectUnion(zoomRect, pointRect);
}

self.mapView.setVisibleMapRect(zoomRect, animated: true)

此代码的主要思想是将 map 居中,以便用户能够看到所有注释。我在 Objective C 中获得了这段代码(来自 SO 的另一个问题)并将其转换为 Swift 但仍然没有运气。

最佳答案

MKMapViewannotations 属性返回[AnyObject]! 并且 AnyObject 没有 coordinate 属性。 您必须转换为 [MKAnnotation] 数组:

var zoomRect = MKMapRectNull
for annotation in self.mapView.annotations as [MKAnnotation] {
    let annotationPoint = MKMapPointForCoordinate(annotation.coordinate)
    let pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1)
    zoomRect = MKMapRectUnion(zoomRect, pointRect)
}

(代码中的显式类型注释不是必需的,变量 循环内部实际上是常量,因此您可以使用 let 声明它们。)

请注意,您可以将 for 循环替换为 reduce 操作:

let zoomRect = reduce(self.mapView.annotations as [MKAnnotation], MKMapRectNull) {
    rect, annotation in
    let annotationPoint = MKMapPointForCoordinate(annotation.coordinate)
    let pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1)
    return MKMapRectUnion(rect, pointRect)
}

关于Swift - 坐标不可用 : APIs deprecated as of iOS 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27195494/

相关文章:

iphone - 如何找到可见MKMapView可见屏幕区域的半径?

ios - 框架的字符串本地化

ios - 使用 NSPredicate 将对象保存到核心数据

ios - 如何在 Swift 的完成处理程序中返回 bool 值

ios - Controller 中泛型类的属性注入(inject)

java - 如何使用 java cdi 在非默认类上使用限定符

java - 永远不会调用注释处理

java - @Value 注释在属于依赖项 jar 的类中未解析

objective-c - UITabBarController w/Multiple MKMapViews

json - 注释未显示在 map 上