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"}]
我正在尝试向我的应用程序添加注释,但在附加到 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"}]