转换为Swift 4语法后,我收到此误导性错误消息。

对成员'>'的含糊引用

在这行代码上:

redCount = alerts!.filter { $0.dangerLevels.filter { $0.level.value == 4 }.count > 0 }.count

完整的上下文代码:
alerts = realm.objects(Alerts).filter(NSPredicate(format: "department != nil")).sorted(byKeyPath: "departmentNumber")

redCount = alerts!.filter { $0.dangerLevels.filter { $0.level.value == 4 }.count > 0 }.count

错误消息根本不是明确的,我可以提供一些提示吗?

请记住,警报Results<Alert>?类型

并且危险等级声明如下:let dangerLevels = List<DangerLevel>()
编辑:

以下是有关闭包内部类型的一些其他信息。
let level = RealmOptional<Int>()

而价值来自RealmOptional
public var value: T? {
        get {
            return underlyingValue.map(dynamicBridgeCast)
        }
        set {
            underlyingValue = newValue.map(dynamicBridgeCast)
        }
    }

编辑2:我已重写语法以提高可读性,但这是我的结果:
redCount = alerts!.filter { $0.dangerLevels.contains { ($0.level.value as! Int) == 4 } }.count

ios - Swift 4-对成员&#39;&gt;&#39;的含糊引用(iOS 11)-LMLPHP

最佳答案

value是一种通用方法,当与文字(即没有定义类型的东西)进行比较时,编译器会遇到一个问题,即要找出要推断的类型。一种解决方法是将as Int添加到表达式的一侧:

(为便于阅读而略作重写)

let alerts = realm.objects(Alerts).filter(NSPredicate(format: "department != nil")).sorted(byKeyPath: "departmentNumber")

let isRedLevel: (DangerLevel) -> Bool = { dangerLevel in
   ($0.level.value as Int) == 4
}
let hasRedLevels: (Alert) -> Bool = { alert in
    alert.dangerLevels.contains(where: isRedLevel)
}

redCount = alerts!.filter(hasRedLevels).count

也可以定义一个常量:
let redAlertType: Int = 4

并使用它代替文字4

关于ios - Swift 4-对成员'>'的含糊引用(iOS 11),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46523499/

10-14 21:30
查看更多