_是_或.isKind(of:)

时间:2019-02-15 16:47:40

标签: ios swift

我一直在努力实现这段代码。我正在将一些旧代码转换为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

2 个答案:

答案 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) } )