はじめに
クロージャに引数ラベルを付けることはできませんが、実は引数ラベルを省略して引数名のみを付けることはできます。
// ✅
let onSaveButtonClicked: (String) -> Void
let onSaveButtonClicked: (_ movieTitle: String) -> Void
// ❌
let onSaveButtonClicked: (movieTitle: String) -> Void // ビルドエラー
環境
- OS:macOS Ventura 13.3.1 (a)
- Xcode:14.3 (14E222b)
- Swift:5.8
クロージャに引数名を明記するメリット
クロージャに引数名を明記するメリットを紹介します。
何が渡ってくるか明確にできる
クロージャ名や型名から推測できることもありますが、先ほどの例( onSaveButtonClicked: (String) -> Void
)のように何が渡ってくるか推測しづらいこともあります。
onSaveButtonClicked: (_ movieTitle: String) -> Void
のように引数名を付けることで、何が渡ってくるか明確にできます。
Xcodeで補完が効く
構造体の生成時にEnterキーを押すと、自動的に引数名が補完されます。
struct Foo {
let onSaveButtonClicked: (_ movieTitle: String) -> Void
}
Twitterで教えていただきました。
余談ですが、Swift Playgroundsでは補完されませんでした。
おわりに
記述量が増えるくらいしかデメリットはなく、メリットが多いので積極的に引数名を明記しようと思いました。
逆に言えば記述量が増えるデメリットがあるので、クロージャ名や型名から推測できる場合は今まで通り省略するのもありかもしれません。
私は基本的にはすべてのクロージャに明記するつもりです。