首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift错误-在执行MKOverlay时不能将'MKOverlay‘类型的值转换为预期的参数类型'@noescape (MKOverlay)引发-> Bool’

Swift错误-在执行MKOverlay时不能将'MKOverlay‘类型的值转换为预期的参数类型'@noescape (MKOverlay)引发-> Bool’
EN

Stack Overflow用户
提问于 2015-10-14 09:37:47
回答 1查看 2.4K关注 0票数 2

我试图将覆盖添加到MKMapView中,通过首先查找映射覆盖(mapView.overlays: MKoverlay)存储中的覆盖来避免重复。

这就是我目前正在尝试的

代码语言:javascript
复制
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)引发-> Bool”

我猜这很简单。过去,我用我自己的结构做过这样的检查,但它似乎不适用于预定义的公共对象数组。

谁能帮我解释一下我的错误吗。我猜这是因为MKOverlay没有可比性--如果是这样的话,我不确定如何最好地将该功能附加到预定义的对象中.

非常感谢

附注:这是Swift 2.0

我主要尝试了使用更简单、更合理的方法

代码语言:javascript
复制
if !overlays.contains(polygon) {
    addOverlay(polygon)
} 

...yielding是一个相同的错误--似乎我遗漏了什么.

EN

回答 1

Stack Overflow用户

发布于 2015-11-07 17:10:26

正如您所推测的,它与MKOverlay不可比较(特别是赤道)有关,而且由于MKOverlay是一种协议,所以不能像类一样扩展它。这个答案对此有很好的解释:如何做indexOfObject或适当的containsObject?

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

代码语言:javascript
复制
    let polygons = mapView.overlays as? [MKPolygon]
    if polygons?.indexOf(polygon) == nil { ... }

MKPolygon是NSObject,所以从Swift 2开始,它就自动符合等价性。

如果不尝试,还不清楚MKPolygon如何实现等式比较。如果这是默认的NSObject指针比较,那么它将不适用于您的示例,因为您正在实例化新的MKPolygon对象。您可以根据自己的逻辑对MKPolygon-hash进行子类,以比较坐标点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33121764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档