@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)