ios - 如果 _ 是 _ 或 .isKind(of : ),正确的使用方法是什么

标签 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

最佳答案

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 的 bool 值,而不是 is 表达式,因此出现错误。

关于ios - 如果 _ 是 _ 或 .isKind(of : ),正确的使用方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713692/

相关文章:

iOS Autolayout 调整标签大小和它们之间的空间

ios - 在没有预处理器宏的情况下,有没有办法在 Xcode 项目的项目级别定义实用的方案特定标志

json - 使用 Swift 在 Firebase 中保存现有的 JSON 文件?

iOS 15 警告 : NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:

swift - 如何判断哪个block guard退出了?

ios - Collection View 最后一项右对齐

ios - 如何反射(reflect)旋转的 ImageView

ios - 音频到音频调用 libjingle_peerconnection 的 cpu 使用率非常高

ios - 模拟所有物理按钮,如 iOS 7 上的主页按钮压力(越狱)

ios - Swift - 从 UIViewControllers 转到 'in' 和 'back' 时内存增加