На моей карте есть два вида аннотаций: пользовательская и стандартная. Мне нужно обновить их в моей карте отдельно, поэтому, когда я перебираю пользовательские, я не хочу мешать другим.
Вот код, где я регистрирую аннотации:
map.register(customAnnotation.self, forAnnotationViewWithReuseIdentifier: "customAnnotation")
map.register(MKPointAnnotation.self, forAnnotationViewWithReuseIdentifier: "standardAnnotation")
и метод делегата:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
let annotation = mapkitView.dequeueReusableAnnotationView(withIdentifier: "customAnnotation") as! customAnnotation
return annotation
}
Вот функция обновления местоположения аннотации:
@objc func updateFireMarkersOnMap(){
print("data count:",fireData.count)
for annot in mapkitView.annotations {
if annot.isEqual(customAnnotation.self) {print("custom annotation found")}
mapkitView.removeAnnotation(annot)
}
for data in fireData {
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(data.lat), longitude: CLLocationDegrees(data.long))
mapkitView.addAnnotation(annotation)
}
}
В этой функции я ожидал, что она напечатает «найденную пользовательскую аннотацию» 350 раз (количество аннотаций, которые у меня есть на карте). Он никогда не печатает эту строку. Я пытался использовать if annot is customAnnotation
, annot.iskind()
, isMember()
, но ни один из них не работал. Как определить, с какой аннотацией я имею дело?
Я удаляю все свои аннотации и добавляю их снова после того, как получаю данные о местоположении из API, но у меня есть два источника, и я не могу их смешать, поэтому мне нужно разобраться с ними по отдельности.
Когда я обновляю один вид аннотации, я не могу удалить другие.
Что мне здесь не хватает?