转换为 Swift 4 语法后,我收到此误导性错误消息。
Ambiguous reference to member '>'
在这行代码上:
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>?
和dangerLevel声明如下: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
最佳答案
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/