Swift MapKit 注释

Swift MapKit Annotations

我正在尝试向我的应用程序添加注释,但在附加到 AnyObject 时遇到了问题。这两个条目(注释 1 详细信息和注释 2)似乎附加到对象,除了第二个注释覆盖第一个条目,我最终得到 2 个具有注释 2 中相同细节的对象。

    var locations = [AnyObject]()
    var myAnnotation = MKPointAnnotation()

    // Annotation 1 Detail
    myAnnotation.coordinate = CLLocationCoordinate2DMake(-38.219836, 146.246249)
    myAnnotation.title = "Annotation Pin 1"
    myAnnotation.subtitle = "Pin 1"
    locations.append(myAnnotation)

    // Annotation 2 Detail
    myAnnotation.coordinate = CLLocationCoordinate2DMake(-37.219836, 146.246249)
    myAnnotation.title = "Annotation Pin 2"
    myAnnotation.subtitle = "Pin 2"
    locations.append(myAnnotation)
var myAnnotation = MKPointAnnotation()
// ...
locations.append(myAnnotation)
// ...
locations.append(myAnnotation)

在第一行中,您创建了一个 MKPointAnnotation 对象。 MKPointAnnotation 是一个 class 实例 - 一种引用类型。因此,myAnnotation 每次都是 同一个对象 。您只是将对它的两个引用附加到您的数组中。它们不是神奇复制的!它们是对 同一个事物.

的两个引用

因此您对 myAnnotation 的更改是在第一次附加引用后 更改 第一个引用指向的内容,因为它仍然指向同一个对象。更简单的例子:

class Dog {
    var name : String = ""
}

var arr : [Dog] = []

var d = Dog()
d.name = "Rover"
arr.append(d)
d.name = "Fido"
arr.append(d) // now arr is [{name "Fido"}, {name "Fido"}]

简单的解决方案:创建两个 MKPointAnnotation 对象!哦哦,什么概念!!!分别配置它们,分别添加到数组中。问题已解决。

class Dog {
    var name : String = ""
}

var arr : [Dog] = []

var d = Dog()
d.name = "Rover"
arr.append(d)
d = Dog() // oooh! what a concept! _another_ Dog!!!!
d.name = "Fido"
arr.append(d) // now arr is [{name "Rover"}, {name "Fido"}]