gpt4 book ai didi

Swift MapKit 注释

转载 作者:行者123 更新时间:2023-11-30 10:19:14 25 4
gpt4 key购买 nike

我正在尝试向我的应用程序添加注释,但在附加到 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 是一个类实例 - 一种引用类型。因此,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"}]

关于Swift MapKit 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28248043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com