【问题标题】:how to squelch "result not used" warnings如何消除“结果未使用”警告
【发布时间】:2016-06-14 18:53:30
【问题描述】:

在 Swift2.2 中,我有一个 Optional 的扩展,看起来像:

extension Optional {
    func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? {
        switch self {
        case .some (let wrapped):
            return closure(wrapped)
        case .none:
            return nil
        }
    }
}

它允许像这样的代码

anImageView.image = self.something.ifNotNil { self.getImageFor($0) }

但有时,我不在乎结果:

myBSON["key"].string.ifNotNil {
    print($0}
}

在 Swift2.2 中,它就像一个魅力。但是启动新的 XCode8 Beta 并转换为 Swift3,我在执行第二种类型的任何地方都会收到警告。就好像有一个隐含的@warn_unused_result。这只是一个早期的 beta 错误吗?或者我在 Swift3 中不能再做的事情?或者我需要在 Swift3 中新修复的东西?

【问题讨论】:

  • 无法使用 Xcode 8 重现此问题。您能否提供一个完整的、可重现的示例来重现该问题而不是存根代码?

标签: swift swift3 xcode8


【解决方案1】:

您可以使用以下方法丢弃结果:

_ = myBSON["key"].string.ifNotNil {
    print($0}
}

或者将您的方法标记为不对未使用的结果发出警告:

extension Optional {

    @discardableResult func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? {
        switch self {
        case .some (let wrapped):
            return closure(wrapped)
        case .none:
            return nil
        }
    }
}

参考:SE-0047

【讨论】:

  • 抱怨。我寻找了@warn_unused_result 的对应对象。必须喜欢两者之间的对称性。一个使用 camelCase,另一个使用 under_scores。一个是警告,另一个不是。
  • 在移植方面,我还有一堆由 Apple 提供的其他 API,这些 API 显然是不可丢弃的。所以在任何我有self.navigationController?.popViewController(animated: true) 之类的东西的地方,我都必须为其添加_ = ... 前缀。因为显然 popViewController 返回了一个控制器,老实说,我从来不需要,现在需要明确忽略。
  • 是的,现在有点困惑。但他们正在将所有内容转移到 CamelCase:Upon acceptance, this proposal removes two of the last remaining instances of snake_case in the Swift language. This further brings the language into a coherent and universal use of lowercase and camel case variants.
  • 是的,我个人反对这个提议。但我认为这些API将来会用@discardableResult注解
  • 我对@9​​87654329@ 有复杂的感觉——虽然我认为(在某种程度上)这是合理的,但我们真的不想处理结果的情况太多了。因此,@discardableResult 最终会成为“必需”的噪音,或者我们最终会得到更多的局部变量。最后,我认为设计师只会添加@discardableResult,而不会返回任何东西——这会迫使设计朝着令人不安的方向发展。
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 2023-03-21
  • 2014-01-18
  • 2016-06-20
  • 2010-12-01
  • 1970-01-01
  • 2012-09-02
相关资源
最近更新 更多