我有一种情况,我迅速将地图注释作为[MKAnnotation]数组。现在,我需要将其转换为用于某些操作的集合。如何迅速做到这一点?基本上,在更新地图视图时,我只需要在地图上添加不存在的注释即可。
答案 0 :(得分:0)
您可以使用mapView.view(for:)
as mentioned here来查找地图上是否存在注释:
if (self.mapView.view(for: annotation) != nil) {
print("pin already on mapview")
}
答案 1 :(得分:0)
“基本上,在更新地图视图时,我只需要在地图上添加不存在的注释。”
我们首先需要定义什么使两个注释相等(在您的方案中)。一旦清除,您将覆盖isEqual
方法。然后,您可以将注释添加到Set
。
这里是一个例子:
class MyAnnotation : NSObject,MKAnnotation{
var coordinate: CLLocationCoordinate2D
var title: String?
convenience init(coord : CLLocationCoordinate2D, title: String) {
self.init()
self.coordinate = coord
self.title = title
}
private override init() {
self.coordinate = CLLocationCoordinate2D(latitude: 0, longitude: 0)
}
override func isEqual(_ object: Any?) -> Bool {
if let annot = object as? MyAnnotation{
// Add your defintion of equality here. i.e what determines if two Annotations are equal.
return annot.coordinate.latitude == coordinate.latitude && annot.coordinate.longitude == coordinate.longitude && annot.title == title
}
return false
}
}
在上面的代码中,MyAnnotation
的两个实例具有相同的坐标和相同的标题时,它们被认为是相等的。
let ann1 = MyAnnotation(coord: CLLocationCoordinate2D(latitude: 20.0, longitude: 30.0), title: "Annot A")
let ann2 = MyAnnotation(coord: CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0), title: "Annot B")
let ann3 = MyAnnotation(coord: CLLocationCoordinate2D(latitude: 20.0, longitude: 30.0), title: "Annot A")
var annSet = Set<MyAnnotation>()
annSet.insert(ann1)
annSet.insert(ann2)
annSet.insert(ann3)
print(annSet.count) // Output : 2 (ann1 & ann3 are equal)