一尘不染

调用[myFunction]的结果未使用

swift

在Obj-C中,常见的做法是使用便利功能执行常见的操作,例如为视图配置自动布局:

func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint
{
   // Make some constraint 
   // ...

   // Return the created constraint
   return NSLayoutConstraint()
}

如果您只需要设置约束而忘了它,则可以调用:

[view1 makeConstraint: view2]

如果要稍后存储约束以便可以删除/修改约束,则可以执行以下操作:

NSLayoutConstraint * c;
c = [view1 makeConstraint: view2]

我想快速执行此操作,但是如果我调用上述函数并且不捕获返回的约束,则会收到警告:

Result of call to 'makeConstraint(withAnotherView:)' is unused

很烦人。有什么方法可以让Swift知道我并不总是想获取返回值吗?

注意:我知道这一点。这很丑陋,而不是我要的东西:

_ = view1.makeConstraint(withAnotherView: view2)

阅读 299

收藏
2020-07-07

共1个答案

一尘不染

这是Swift 3中引入@warn_unused_result的行为。现在,它成为默认行为,而不必显式地对函数进行注释以告知编译器调用者应使用结果。

您可以@discardableResult在函数上使用该属性,以告知编译器调用者不必“使用”返回值。

@discardableResult
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint {

   ... // do things that have side effects

   return NSLayoutConstraint()
}

view1.makeConstraint(view2) // No warning

let constraint = view1.makeConstraint(view2) // Works as expected

您可以在演进建议中更详细地了解此更改。

2020-07-07