Skip to main content

@discardableResult とは何か

TL;DR​

  • @discardableResult は、値を返す関数・メソッドに付ける属性。
  • 戻り値を使わずに呼び出しても「結果を使っていない」というコンパイラ警告を抑制する。
  • 「戻り値は用意するが、無視するのも正当なユースケース」という設計意図を明示するために使う。

このドキュメントの射程​

  • Swift で戻り値のある関数の結果を無視すると、コンパイラが警告を出す。
  • この警告を意図的に抑制したいケース(メソッドチェーン、戻り値が必須でないAPI)で何を使えばよいかを整理する。

原因​

  • Swift はデフォルトで、戻り値のある関数・メソッドの結果が使われないと警告を出す。
  • これは「戻り値を使い忘れているのでは?」というバグ検出のための仕組み。
  • しかし設計上、戻り値を無視することが正当なケースもあり、その場合に毎回警告が出るのは邪魔になる。

解決​

  • 関数・メソッドに @discardableResult を付けると、戻り値を無視しても警告が出なくなる。
  • 戻り値を使う呼び出しは今まで通り可能。
@discardableResult
func doSomething() -> Int {
return 42
}

doSomething() // 警告なし
let value = doSomething() // 使ってもOK

典型的な使いどころ​

  • メソッドチェーン(fluent API): self を返して .foo().bar() とつなげる設計で、最終的な戻り値を使わないケース。
  • 戻り値が「あると便利だが必須ではない」ケース: 標準ライブラリの Array.remove(at:) は削除した要素を返すが、多くの場合その値は不要。

まとめ​

  • @discardableResult は「戻り値の無視を正当なユースケースとして許容する」という設計意図をコンパイラと読み手に伝える属性。

参考​

  • Swift 公式ドキュメント: Attributes(discardableResult)