调用[myFunction]的结果未使用

时间:2016-06-21 08:44:53

标签: swift function

在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]

我想在swift中执行此操作,但如果我调用上面的函数并且不捕获返回的约束,我会收到警告:

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

非常讨厌。有没有办法让Swift知道我并不总是想要捕获返回值?

注意:我知道这一点。这很难看,而不是我在寻找的东西:

_ = view1.makeConstraint(withAnotherView: view2)

2 个答案:

答案 0 :(得分:25)

这是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

您可以在the evolution proposal上详细了解此更改。

答案 1 :(得分:0)

您可以尝试从项目的“构建设置”中关闭警告。我喜欢这个问题,好点。做了一些研究,发现了这一点。 https://stackoverflow.com/a/34932152/5615274

尚未测试。