iOS Swift: cómo comprobar si existe un object en una matriz para que no lo añada, o para volver a crear un GMSMarker con ella?

He estado trabajando con gmaps para el sdk de iOS y tengo este problema: cada vez que el map apunta, amplía y amplía (estoy usando Delegate idleAtCameraPosition ) en mi server, comparo las coorderadas del centro del map para marcar pins de lugares a su alnetworkingedor. Guardo los lugares en una variedad de objects "Lugares", cuando están lo suficientemente cerca (1 km) de las coorderadas del centro.

Mi problema es que no he podido evitar agregar objects repetidos a la matriz, así que cada vez que hago el map, pero no cambio la position de la camera, los marcadores existentes en la pantalla se vuelven a agregar al Array de lugares. Intenté usar este código, pero no funciona y la matriz puede crecer infinitamente hasta estrellar la aplicación:

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

pero no funciona

También tengo otra matriz de GMSMarkers que se alimenta de la matriz Places; intenté este código para evitar volver a crear marcadores en el map con los objects Places que ya existían:

 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.mapGoogle } else { pinPlace.map = nil } } 

Cualquier ayuda sería muy apreciada; gracias

Probablemente su Place está utilizando una definición pnetworkingeterminada de Equatable que no es lo que espera. Necesitará algo como esto para que contains () funcione como se esperaba:

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

Compruebe la definición del lugar, o cree uno si usa un valor pnetworkingeterminado que comtesting solo los campos necesarios.

¿Has intentado usar un set? Swift admite un tipo de colección Set que maneja la originalidad para usted. El tipo que almacena en el set solo necesita implementar Hashable, que puede implementar en su class GMSMarker. (O, si no es su class, puede agregar una extensión para implementar el protocolo Hashable)

Consulte la documentation de Apple en Conjuntos.

Si está cargando todos los nuevos objects de todos modos, puede simplemente vaciar la matriz existente antes de agregar los nuevos valores. self.markerArray.removeAll() luego agregue sus nuevos objects.