【问题标题】:Swiftlint warning : For Where Violation: `where` clauses are preferred over a single `if` inside a `for`. (for_where)Swiftlint 警告:对于 Where 违规:`where` 子句优于 `for` 中的单个 `if`。 (for_where)
【发布时间】:2017-08-09 12:19:37
【问题描述】:

我正在使用 swift 进行应用程序开发并使用 Swift lint。但我收到有关以下代码的警告:

for settingsKeys in searchResults {

        if  settingsKeys.key == settingsObject.key {
          settingsKeys.value = settingsObject.value
          try context.save()
        }
      }

特此附上截图:

没有可用的自动修复选项,那么如何消除此警告?

【问题讨论】:

  • 这里有什么问题?

标签: swift3 xcode8 swiftlint


【解决方案1】:

您的 swiftlint 配置首选的语法是:

for settingsKeys in searchResults where settingsKeys.key == settingsObject.key {
    settingsKeys.value = settingsObject.value
    try context.save()
}

和哪个相似

for settingsKeys in (searchResults.filter { $0.key == settingsObject.key }) {
    settingsKeys.value = settingsObject.value
    try context.save()
}

如果你知道只有一个结果与key相同,你可以直接使用

if let settingsKeys = (searchResults.first { $0.key == settingsObject.key }) {
    settingsKeys.value = settingsObject.value
    try context.save()
}

【讨论】:

  • 如果你想使用过滤器获得相同的行为,你需要.lazy.filter
  • @Alexander True,不想谈这些细节。
  • 谢谢。它帮助了我。
【解决方案2】:

看起来它希望 where 成为 for 的一部分…

for settingsKeys in searchResults where settingsKeys.key == settingsObject.key {
    settingsKeys.value = settingsObject.value
    try context.save()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多