Swift-坐标不可用:从iOS 7开始,API已弃用

Swift-坐标不可用:从iOS 7开始,API已弃用,swift,annotations,mapkit,mkannotation,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 anno

我试图通过
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,但仍然没有运气。
MKMapView的
注释
属性返回
[AnyObject]
并且
AnyObject
没有
坐标
属性。 您必须强制转换到
[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
,但你说的有道理!非常感谢。