iOS Swift:如何检查对象是否存在于数组中,以便我不将其添加到它中,或使用它重新创建一个GMSMarker?

小工具00

我一直在使用适用于iOS sdk的gmaps并遇到以下问题:每当服务器端地图平移或缩放并完成操作(我使用Delegate idleAtCameraPosition即时贴)时,我都会比较地图中心的坐标,以标记图钉周围的地方。当位置离中心坐标足够近(1公里)时,将位置保存在“位置”对象数组中。

我的问题是,我一直无法避免将重复的对象添加到数组中,因此,每次平移地图但没有改变相机的位置时,屏幕上的现有标记都会重新添加到放置数组。我尝试使用此代码,但是它不起作用,并且数组可以无限增长,直到崩溃应用程序:

   if(!arrayProp.contains(place)){
      arrayProp.append(place)
   }

但这是行不通的。

我还有另一个GMSMarkers数组,它从Places数组中获取数据。尝试使用以下代码来避免使用已经存在的Places对象在地图中重新创建标记:

for place in arrayProp {
                let pinPlace = PlaceMarker(propied: place)//custom GMSMarker class
                if(self.markerArray.contains(pinPlace) == false ) {
                    self.markerArray.append(pinPlace)
                    pinPlace.map = self.mapaGoogle
                } else {
                    pinPlace.map = nil
                }
            }

任何帮助将不胜感激; 谢谢你

亚历克斯·库里洛(Alex Curylo)

可能您Place正在使用Equatable的默认定义,这不是您所期望的。您需要像这样的东西,contains()才能按预期工作:

struct Place: Equatable {
    let there: Bool
}

func ==(lhs: Place, rhs: Place) -> Bool {
    return lhs.there == rhs.there
}

检查Place的定义,如果使用只检查必要字段的默认值,则创建一个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档