Swift - 坐标不可用:从 iOS 7 开始不推荐使用 API
Posted
技术标签:
【中文标题】Swift - 坐标不可用:从 iOS 7 开始不推荐使用 API【英文标题】:Swift - Coordinate is unavailable: APIs deprecated as of iOS 7 【发布时间】: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,但仍然没有运气。
【问题讨论】:
【参考方案1】:MKMapView
的 annotations
属性返回 [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
的替代品,但你说的很有道理!谢谢!以上是关于Swift - 坐标不可用:从 iOS 7 开始不推荐使用 API的主要内容,如果未能解决你的问题,请参考以下文章
Swift IOS 使用 AVFoundation 录制视频和音频
从节点池开始GKE非常慢 - 集群和k8s / gcloud api不可用
[转]iOS地球坐标、火星坐标和百度坐标之间转换(Swift3.0)