Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift错误-无法转换类型为';MKOverlay';到预期的参数类型'@noescape(MKOverlay)抛出->;Bool';-执行索引时_Arrays_Swift_Object_Indexof - Fatal编程技术网

Arrays Swift错误-无法转换类型为';MKOverlay';到预期的参数类型'@noescape(MKOverlay)抛出->;Bool';-执行索引时

Arrays Swift错误-无法转换类型为';MKOverlay';到预期的参数类型'@noescape(MKOverlay)抛出->;Bool';-执行索引时,arrays,swift,object,indexof,Arrays,Swift,Object,Indexof,我试图将覆盖添加到MKMapView,通过首先在maps覆盖(mapView.overlays:[MKoverlay])存储中查找覆盖来避免重复 这就是我目前正在尝试的 func addBoundary(points: [CLLocationCoordinate2D]) -> MKPolygon! { var x = points let polygon: MKPolygon = MKPolygon(coordinates: &x, count: points.co

我试图将覆盖添加到MKMapView,通过首先在maps覆盖(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不可比较有关-如果是这样,我不确定如何最好地将该功能附加到预定义对象上

非常感谢

p、 这是Swift 2.0

我主要尝试使用更简单、更符合逻辑的方法

if !overlays.contains(polygon) {
    addOverlay(polygon)
} 

…产生了一个相同的错误-似乎我遗漏了什么。

正如您所猜测的,这与
MKOverlay
不可比较(特别是)有关,并且由于
MKOverlay
是一个协议,您不能像扩展类那样扩展它。这个答案对此有很好的解释:

如果您确定
overlays
实际上只包含
MKPolygon
对象,请尝试将
[MKOverlay]
强制转换为
[MKPolygon]

    let polygons = mapView.overlays as? [MKPolygon]
    if polygons?.indexOf(polygon) == nil { ... }
MKPolygon
是一个NSObject,所以


如果不尝试,就不清楚
MKPolygon
如何实现相等比较。如果它是默认的NSObject指针比较,那么它将不适用于您的示例,因为您正在实例化新的
MKPolygon
对象。您可以子类化
MKPolygon
,并基于您自己的逻辑来比较坐标点。

可能只需选择简单选项,删除所有并添加您想要查看的坐标点。i、 removeOverlays(mapView.overlays)这就是它一直以来的工作方式。当从数据库中提取这些覆盖时,最好逐步添加这些覆盖(因此它们保留在屏幕外)。当前的方法相当原始,我希望对其进行改进,以这种方式,您可以将其转换为NSValue,然后进行比较吗?这就是我比较位置的方式……我的主要问题是使用新内置函数映射/枚举数组。毫无疑问,我可以迭代/遍历数组,并以老派的方式进行比较,我只是希望使用一些新奇的Swift 2.0函数。。。可悲的是,我要么做得全错了,要么还没有做到:(也许尝试一下,让polys=mapview.overlays.map{$0 as!MKOverlay}然后循环通过它,而不是循环通过mapview.overlays。我知道我在使用MKAnnotations时必须这样做,因为转换会失败,但通过map方法它是有效的