Swift “如何压制”;“结果未使用”;警告
在Swift2.2中,我有一个扩展到Swift “如何压制”;“结果未使用”;警告,swift,swift3,xcode8,Swift,Swift3,Xcode8,在Swift2.2中,我有一个扩展到Optional,看起来像: extension Optional { func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? { switch self { case .some (let wrapped): return closure(wrapped) case .none: retur
Optional
,看起来像:
extension Optional {
func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? {
switch self {
case .some (let wrapped):
return closure(wrapped)
case .none:
return nil
}
}
}
但有时,我并不在乎结果:
myBSON["key"].string.ifNotNil {
print($0}
}
在Swift2.2中,它就像一个符咒。但是启动新的XCode8测试版并转换成Swift3,我在任何地方都会收到警告,说我使用了第二种类型。这几乎就好像有一个隐式的
@warn\u unused\u结果
。这只是一个早期的测试错误吗?或者是我在Swift3中不能再做的事情?或者我需要在Swift3中新修复的内容?您可以使用以下方法放弃结果:
_ = 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
}
}
}
扩展名可选{
@discardableResult函数ifNotNil(u-闭包:(已包装)->T)->T{
切换自身{
案例。一些(让我们包装):
返回闭合(已包装)
案例:无:
归零
}
}
}
参考:无法使用Xcode 8重现此问题。你能提供一个完整的、可复制的例子来复制问题而不是存根代码吗。我查找了
@warn\u unused\u result
的对应项。我喜欢两者之间的对称性。一个使用camelCase,另一个使用UNU分数。一个是警告,另一个不是。在移植中,我还有一堆苹果提供的其他API,它们显然是不可丢弃的。因此,无论我在哪里有类似于self.navigationController?.popViewController(动画:true)
的东西,我都必须向它添加\=…
前缀。因为显然popViewController返回了一个控制器,我从来都不需要它,现在需要显式忽略它。是的,它现在有点混乱。但他们正在将所有内容转移到CamelCase:一旦接受,该提案将删除Swift语言中最后剩下的两个snake_案例。这进一步使该语言成为小写和驼峰大小写变体的连贯和普遍使用。
是的,我个人反对这一提议。但我认为这些API在未来将被注释为@discardableResult
。我对@discardableResult
的感觉好坏参半——虽然我认为这是合理的(在某种程度上),但我们确实不想处理结果的实例太多了。因此,@discardableResult
最终成为“必需”噪声,或者我们最终得到更多局部变量。最后,我认为设计师不会返回任何东西,而会添加@discardableResult
——这迫使设计朝着令人不安的方向发展。
extension Optional {
@discardableResult func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? {
switch self {
case .some (let wrapped):
return closure(wrapped)
case .none:
return nil
}
}
}