作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在为 iOS sdk 使用 gmaps 并遇到这个问题:每次 map 平移或缩放时并完成(我使用的是委托(delegate)idleAtCameraPosition)在我的服务器端我比较 map 中心的坐标,以便标记它周围的地方。当它们距离中心坐标足够近(1 公里)时,我将这些位置保存在“位置”对象数组中。
我的问题是我无法避免将重复的对象添加到数组中,所以每次我平移 map 但不改变相机位置时,屏幕上的现有标记都会重新显示添加到 Places 数组。我尝试使用此代码,但它不起作用并且数组可以无限增长直到应用程序崩溃:
if(!arrayProp.contains(place)){
arrayProp.append(place)
}
但它不起作用。
我还有另一个 GMSMarkers 数组,它从 Places 数组中获取数据;尝试使用此代码来避免使用已存在的 Places 对象在 map 中重新创建标记:
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
}
}
任何帮助将不胜感激;谢谢
最佳答案
可能您的 Place
使用的是 Equatable 的默认定义,这不是您所期望的。您需要类似这样的东西才能使 contains() 按预期工作:
struct Place: Equatable {
let there: Bool
}
func ==(lhs: Place, rhs: Place) -> Bool {
return lhs.there == rhs.there
}
检查 Place 的定义,如果它使用仅检查必要字段的默认值,则创建一个。
关于iOS Swift : how to check if Object exists in an Array so I don't add it to it, 或用它重新创建 GMSMarker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36848141/
我是一名优秀的程序员,十分优秀!