• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Swift 4 - 对成员 '>' (iOS 11) 的模糊引用

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:38:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在转换为 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

错误信息根本不明确,我可以给一些提示吗?

请记住,alerts 的类型是 Results?

dangerLevel 声明如下: let dangerLevels = List()

编辑:

这里有一些关于闭包内类型的附加信息。

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

enter image description here



Best Answer-推荐答案


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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap