Несколько GMSMarker Показать / Скрыть потребляет время


У меня есть около 4000 маркеров на карте GoogleMap, и я не использую кластеризацию. Итак, на данный момент то, что я делаю, чтобы показать/ скрыть маркеры на карте, находится ниже.

marker.map = nil 
marker.map = mapView
Есть некоторые случаи, когда мне нужно отфильтровать некоторые маркеры и сделать их видимыми, иначе они должны быть скрыты. Таким образом, я могу достичь этого с помощью кода, но с затратами времени.
markers.forEach { (marker) in
                if !arrDeviceID.contains(marker.deviceID ?? "") {
                        marker.map = nil
                } else {
                        marker.map = self.googleMapView
                }
            }

То же самое в Android есть свойство Visibility, которое работает идеально и быстро. Но в iOS такого свойства нет.

Так что же я могу делайте, чтобы улучшить производительность.

2 3

2 ответа:

Допустим, это Ваш массив маркеров

var markers = [GMSMarker]()

Подготовьте словарь маркеров, предположим, что Ваш идентификатор устройства находится в Int

func prepareMarkersDict(markers:[GMSMarker]) -> [Int:GMSMarker]{
    var markerDict = [Int:GMSMarker]()
    for marker in markers{
        markerDict[marker. deviceID] = marker
    }
    return markerDict
}

Ваш массив идентификаторов устройств, который вы хотите скрыть

var arrDeviceIDToHide = [Int]()

Теперь повторите его и спрячьте маркер

let markerDict = prepareMarkersDict(markers:markers)
for deviceId in arrDeviceIDToHide{
   let marker = markerDict[deviceId]
   marker?.map = nil
}

Реализация будет выглядеть примерно так:

var markers: [Int: GMSMarker] = [:]
func addMarker(with identifier: Int) {
 let marker = GMSMarker(position: someCoordinates)
 markers[identifier] = marker
}
func removeMarker(with identifier: Int) {
  markers[identifier]?.map = nil
}