【问题标题】:Xcode 9.1 - Ambigous reference to member filterXcode 9.1 - 对成员过滤器的模糊引用
【发布时间】:2017-11-15 13:33:20
【问题描述】:

我过去已经遇到过这个问题,我已经解决了。

但今天我刚刚下载了新的 Xcode 9.1 版,我的应用程序不再构建,我得到了:

对成员“过滤器”的模糊引用

我不知道为什么,这不是我正在编写的代码。几周以来,该应用程序一直在构建/编译良好。

当我查看 Official Apple Website 上的发行说明时,我似乎没有找到任何关于我的问题的参考。

所以这是 2 小时前运行良好的代码:

var severeWeather: Results<SevereWeather>?
var vigiArray = Array<SevereWeather>()
var redCount: Int = 0

severeWeather = realm.objects(SevereWeather.self).filter(NSPredicate(format: "department != nil"))
.sorted(byKeyPath: "departmentNumber")

vigiArray = Array(severeWeather!)

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

我的代码有什么问题?

【问题讨论】:

  • 到底有什么问题?
  • 最后一个。在.filter上
  • 请提供Minimal, Complete and Verifiable example。在没有看到您的 Realm 对象类并因此无法实际测试您的代码的情况下,很难确定为什么编译器无法决定使用哪个 filter 方法,Realm 的还是 Swift 的。
  • @DávidPásztor 谢谢你的建议。
  • 您是否尝试添加括号:redCount = vigiArray.filter { ($0.dangerLevels.filter { $0.level.value == 4 }).count > 0 }.count

标签: ios swift xcode realm swift4


【解决方案1】:

RealmCollection 还有一个filter 方法,实现方式不同。出于某种原因,Swift 编译器不知道它应该引用哪一个。

这个呢:

redCount = vigiArray.filter {
    return $0.dangerLevels.filter(NSPredicate(format: "%K == %@", "level.value", NSNumber(integerLiteral: 4))).count > 0
}.count

与其自己访问dangerLevels 中的每个元素,不如构建 Predicate 并让领域为您完成这项工作。

用这个替换你的嵌套过滤器,它应该编译得很好。

【讨论】:

  • 谢谢,您的解决方案有效。实际上,这是 Swift 和 Realm 过滤器方法的编译器问题。
  • 很高兴我能帮上忙 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2016-11-12
  • 2019-11-01
  • 2016-02-16
相关资源
最近更新 更多