Проблема в том, что annotations
представляет собой массив MKAnnotation
. Но этот протокол требует только наличия свойства coordinate
, но не диктует, что это переменная. Обратите внимание на отсутствие set
в протоколе:
public protocol MKAnnotation : NSObjectProtocol {
// Center latitude and longitude of the annotation view.
// The implementation of this property must be KVO compliant.
var coordinate: CLLocationCoordinate2D { get }
...
}
Таким образом, при переборе annotations
из MKMapView
, который определен как массив MKAnnotation
, он не знает, является ли ваша координата переменной или константой, и генерирует это предупреждение.
Но давайте представим, что ваши аннотации были MKPointAnnotation
. В этом конкретном типе аннотации coordinate
является переменной, а не константой. Таким образом, вы можете быть конкретным о типе. Например:
for annotation in mapView.annotations {
if let annotation = annotation as? MKPointAnnotation {
annotation.coordinate = CLLocationCoordinate2D(latitude: 12.12121212, longitude: 14.312121121)
}
}
Or
mapView.annotations
.compactMap { $0 as? MKPointAnnotation }
.forEach { existingMarker in
existingMarker.coordinate = CLLocationCoordinate2D(latitude: 12.12121212, longitude: 14.312121121)
}
Очевидно, если вы определите свой собственный класс аннотации, который соответствует MKAnnotation
, очевидно:
определите coordinate
как переменную, а не константу; и
убедитесь, что это dynamic
.
Таким образом:
class MyAnnotation: NSObject, MKAnnotation {
dynamic var coordinate: CLLocationCoordinate2D
dynamic var title: String?
dynamic var subtitle: String?
// other properties unique to your annotation here
init(coordinate: CLLocationCoordinate2D, title: String? = nil, subtitle: String? = nil) {
self.coordinate = coordinate
self.title = title
self.subtitle = subtitle
super.init()
}
}
И тогда шаблон такой же, как указано выше, за исключением ссылки на ваш класс, например:
mapView.annotations
.compactMap { $0 as? MyAnnotation }
.forEach { existingMarker in
existingMarker.coordinate = CLLocationCoordinate2D(latitude: 12.12121212, longitude: 14.312121121)
}
person
Rob
schedule
28.05.2017