【发布时间】:2015-10-14 09:37:47
【问题描述】:
我正在尝试将叠加层添加到 MKMapView,通过首先在地图叠加层 (mapView.overlays: [MKoverlay]) 存储中查找叠加层来避免重复。
这是我目前正在尝试的
func addBoundary(points: [CLLocationCoordinate2D]) -> MKPolygon! {
var x = points
let polygon: MKPolygon = MKPolygon(coordinates: &x, count: points.count)
if overlays.indexOf(polygon as MKOverlay) == nil {
addOverlay(polygon)
return polygon
}
return nil
}
但是,我收到以下错误
无法将“MKOverlay”类型的值转换为预期的参数类型“@noescape (MKOverlay) throws -> Bool”
我猜这很简单。过去我曾设法用我自己的结构进行这样的检查,但它似乎不适用于公共对象的预定义数组。
有人能解释一下我的错误吗?我猜这与 MKOverlay 不具有可比性有关 - 如果是这种情况,我不确定如何最好地将该功能附加到预定义的对象......
非常感谢
附言这是 Swift 2.0
我主要尝试了更简单、更合乎逻辑的使用方法
if !overlays.contains(polygon) {
addOverlay(polygon)
}
...产生相同的错误 - 我似乎遗漏了一些东西。
【问题讨论】:
-
也许只是选择简单的选项,然后删除所有内容并添加您要查看的内容。即 mapView.removeOverlays(mapView.overlays)
-
这就是它一直到现在的运作方式。当它们从数据库中提取时,逐渐添加这些叠加层(因此它们保留在屏幕外)会很好。当前的方法相当原始,我希望以这种方式对其进行改进
-
你能转换成一个 NSValue 然后比较它吗?这就是我比较位置的方式......
-
我的主要问题是使用新的内置函数映射/枚举数组。毫无疑问,我可以迭代/遍历数组,并以老式的方式进行比较,我只是希望使用一些花哨的新 Swift 2.0 函数......可悲的是,我似乎要么做错了,要么还没到呢:(
-
也许试试,让 polys = mapview.overlays.map { $0 as! MKOverlay } 然后循环遍历而不是遍历 mapview.overlays。我知道在使用 MKAnnotations 时我必须这样做,因为演员表会失败,但通过 map 方法它可以工作
标签: arrays swift object indexof