我一直在努力实现这段代码。我正在将一些旧代码转换为swift,但无法使[annotation isKindofClass]等效。
最初,我使用了类似的命令(给我带来错误
mapView.annotations.forEach {
if !$0.isKind(of: MKUserLocation) {
self.mapView.removeAnnotation($0)
}
}
但是我在this上读到,Swift的执行方式有所不同。
mapView.annotations.forEach {
if !$0 is MKUserLocation {
self.mapView.removeAnnotation($0)
}
}
这给我一个错误:无法将MKAnnotation类型的值转换为预期的参数类型BOOL
答案 0 :(得分:2)
public func isKind(of aClass: AnyClass) -> Bool
此函数需要AnyClass
作为参数,您必须使用.self
传递一个类
mapView.annotations.forEach {
if !$0.isKind(of: MKUserLocation.self) {
self.mapView.removeAnnotation($0)
}
}
使用is
时,必须在表达式中加上括号:
mapView.annotations.forEach {
if !($0 is MKUserLocation) {
self.mapView.removeAnnotation($0)
}
}
您正在检查$0
的布尔值,而不是is
表达式,因此是错误。
答案 1 :(得分:1)
简而言之,您可以With
mapView.annotations.remove(where:{ !($0 is MKUserLocation) } )