2016-06-21 4 views
14

未使用で、一般的な方法は、ビューの自動レイアウトを設定するように、一般的な操作を実行するための便利な機能を使用していました制約とそれを忘れ、あなたが呼び出すことができます。結果がobj-Cで

[view1 makeConstraint: view2]

あなたは、あなたがそれを変更/削除することができるように、後で制約を保存したい場合は、あなたのようなものだろう:

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

は私が迅速にこれをしたいが、私は上記の関数を呼び出し、返された制約をキャプチャしていない場合、私は警告を取得:

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

非常に迷惑を。スウィフトに、私が常に戻り値を捕捉したくないと知らせる方法がありますか?

注:私はこれについて知っています。

_ = view1.makeConstraint(withAnotherView: view2) 

答えて

24

これはSwift 3で導入された動作です。@warn_unused_resultの関数に明示的に注釈を付ける代わりに、呼び出し元によって結果が使用されることをコンパイラに指示する代わりに、これがデフォルトの動作になりました。

@discardableResult属性を関数に使用すると、戻り値を呼び出し側が '消費'する必要がないことをコンパイラーに通知できます。あなたはthe evolution proposalでより詳細に、この変更について読むことができます

@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 

+0

一方で、@discardableResultを一度入れてすべて修正することはできますが、一方ではポッドと一緒にすることはできません。したがって、関数呼び出しの前に_ =を追加して結果を無視します –

0

あなたのプロジェクトのビルド設定から警告をオフにすることができます。私は質問、良い点が好きです。いくつかの研究を行い、これを発見しました。 https://stackoverflow.com/a/34932152/5615274

まだテストしていません。

関連する問題