Swift MapKit addAnnotation vs addAnnotations

Swift MapKit addAnnotation vs addAnnotations,swift,mapkit,mapkitannotation,Swift,Mapkit,Mapkitannotation,我正在构建一个应用程序,在该应用程序中,我将向地图添加几个注释。 作为第一次测试,我尝试了 let anotacao = MKPointAnnotation() anotacao.coordinate.latitude = -23.623558 anotacao.coordinate.longitude = -46.581787 anotacao.title = "Annotation 1 Title" anotacao.subtitle = "Annotation 1 Subtitle" se

我正在构建一个应用程序,在该应用程序中,我将向地图添加几个注释。 作为第一次测试,我尝试了

let anotacao = MKPointAnnotation()
anotacao.coordinate.latitude = -23.623558
anotacao.coordinate.longitude = -46.581787
anotacao.title = "Annotation 1 Title"
anotacao.subtitle = "Annotation 1 Subtitle"
self.mapa.addAnnotation(anotacao)

anotacao.coordinate.latitude = -23.623658
anotacao.coordinate.longitude = -46.582787
anotacao.title = "Annotation 2 Title"
anotacao.subtitle = "Annotation 2 Subtitle"
self.mapa.addAnnotation(anotacao)

anotacao.coordinate.latitude = -23.623258
anotacao.coordinate.longitude = -46.591787
anotacao.title = "Annotation 3 Title"
anotacao.subtitle = "Annotation 3 Subtitle"
self.mapa.addAnnotation(anotacao)
我的预期结果是看到地图上的3个注释,但我只有最后一个注释。 我还尝试将这些代码行添加到

Timer.scheduledTimer(withTimeInterval: 8, repeats: true) { (timer) in
         if index == 1 {
                 anotacao.coordinate.latitude = -23.623558
                 anotacao.coordinate.longitude = -46.581787
                 anotacao.title = "Annotation 1 Title"
                 anotacao.subtitle = "Annotation 1 Subtitle"
                 self.mapa.addAnnotation(anotacao)
                 index += 1
         } else if index == 2 {
                 anotacao.coordinate.latitude = -23.623658
                 anotacao.coordinate.longitude = -46.582787
                 anotacao.title = "Annotation 2 Title"
                 anotacao.subtitle = "Annotation 2 Subtitle"
                 self.mapa.addAnnotation(anotacao)
                 index += 1
         } else if index == 3 {
                 anotacao.coordinate.latitude = -23.623258
                 anotacao.coordinate.longitude = -46.591787
                 anotacao.title = "Annotation 3 Title"
                 anotacao.subtitle = "Annotation 3 Subtitle"
                 self.mapa.addAnnotation(anotacao)
        }
尽管在实际项目中不可用,但上面的代码在地图上显示了3个注释

搜索Stackoverflow时,我找到了另一种方法,即使用addAnnotations,这正是我所需要的。 我的最终代码与该线程中的建议完全相同

因为我对Swift编程非常陌生,所以我在这篇文章中的主要观点是试图理解为什么第一个代码不起作用。我在addAnnotation中遗漏了什么


我使用的是Xcode 11.2、Swift4、IOS13和macOS Catalina

缺少的一点是MKPointAnnotation是一个引用类型的类,映射存储了对您创建的类实例的引用。因此,每次尝试添加新注释时,实际上是在更新现有注释的属性,而不是创建和添加新注释。这就是为什么它总是最后一组可见的值

要使第一个示例正常工作,您需要为三个注释中的每一个创建一个新的mkmapanotation


事实上,我很惊讶基于计时器的一个可以工作,因为您似乎仍然在更新同一个对象。我要和那一个玩一玩…

谢谢你的解释。基于计时器的流确实有些奇怪。。。