1. ホーム
  2. アイオス

[解決済み】Xcode 8 / Swift 3:「UIViewController?型の式は未使用です」という警告が表示される

2022-04-20 03:22:16

質問

以下の関数がありますが、以前はきれいにコンパイルできたのに、Xcode 8では警告が発生します。

func exitViewController()
{
    navigationController?.popViewController(animated: true)
}

"型 "UIViewController?" の式は未使用です"。

なぜこのように表示されるのでしょうか、また、これを取り除く方法はありますか?

コードは期待通りに実行されます。

解決方法は?

TL;DR

popViewController(animated:) リターン UIViewController? という警告が表示されます。解決策は、この値をアンダースコアに代入することです。

_ = navigationController?.popViewController(animated: true)


Swift 3 変更点

Swift 3以前は、すべてのメソッドがデフォルトで"discardable result"を持っていました。メソッドが返すものを捕捉しなかったときに、警告は発生しませんでした。

コンパイラに結果をキャプチャするよう指示するためには、コンパイラに @warn_unused_result をメソッド宣言の前に記述します。これは、フォームが変更可能なメソッドに使われるでしょう(ex. sortsortInPlace ). あなたは @warn_unused_result(mutable_variant="mutableMethodHere") をコンパイラに伝える。

しかし、Swift 3では、動作が反転しています。すべてのメソッドは、戻り値がキャプチャされていないことを警告するようになりました。警告が必要ないことをコンパイラに伝えたい場合は、メソッドに @discardableResult をメソッド宣言の前に記述します。

戻り値を使いたくない場合は 明示的に をアンダースコアに代入してコンパイラに伝えてください。

_ = someMethodThatReturnsSomething()

Swift 3にこれを追加する動機。

  • 起こりうるバグの防止(例 sort コレクションを変更すると思っている)
  • 他の協力者のために結果を捕捉しない、または捕捉する必要があるという明示的な意図

UIKit APIは、この点では遅れているようです。 @discardableResult を使用した場合、完全に正常な(より一般的ではないにしても) popViewController(animated:) のように、戻り値をキャプチャせずに

続きを読む