【问题标题】:Swift - Coordinate is unavailable: APIs deprecated as of iOS 7Swift - 坐标不可用:从 iOS 7 开始不推荐使用 API
【发布时间】:2014-11-28 20:27:38
【问题描述】:

我正在尝试通过获取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)

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

【问题讨论】:

    标签: swift annotations mapkit mkannotation


    【解决方案1】:

    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 声明它们。)

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

    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)
    }
    

    【讨论】:

    • 没错!我专注于那个错误,并试图找到annotation.coordinate 的替代品,但你说的很有道理!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多