質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

解決済

1回答

825閲覧

(labelの有無)Button()のパラメータの記述方法

15bbtr135tr16wr

総合スコア1

0グッド

0クリップ

投稿2021/07/08 18:15

Button()のパラメータに関する質問

SwiftUIのButton()を用いる際にactionlabelの2つのパラメータがありますが、様々なサンプルコードを見ると2パターン(labelの明示的な宣言の有無)が確認できました。それらをXcodeで実行した場合どちらも機能は同じです。

Button()以外でも同じようにパラメータの省略ができるものも多くあります。
SwiftUIもしくはSwift言語自体の何らかの記述の仕様であると考えています。

下記のコードのパラメータ省略の記述方法の正式名称と簡単な動作原理と正しい使い方の解説をお願い致します。

label あり

Swift

1Button(action: {}, label:{ 2 Text("placeholder") 3})

label なし

Swift

1Button(action: {}) { 2 Text("placeholder") 3}

補足情報

Xcode 12
SwiftUI 2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

それは trailing closure という Swift 言語の機能で、関数 (や、構造体などのイニシャライザ) 呼び出しの最後の引数がクロージャの場合、引数ラベルを省略して、クロージャを ) の後ろに書くことができます。
参考: Trailing Closures (Closures - The Swift Programming Language (Swift 5.5))
参考: トレイリングクロージャ (クロージャとは | Swiftの始め方)

つまり、

swift

1Button(action: { 2 print("Hello, World!") 3}, label: { 4 Text("placeholder") 5})

swift

1Button(action: { 2 print("Hello, World!") 3}) { 4 Text("placeholder") 5}

はまったく同じ意味です。

また、

swift

1VStack { 2 Text("Text 1") 3 Text("Text 2") 4}

は次の書き方の省略形だったりします。

swift

1VStack(content: { 2 Text("Text 1") 3 Text("Text 2") 4})

さらに、Swift 5.3 では、引数の最後にクロージャが複数ある場合、すべて ) の外側に書けるようになりました。
参考: swift-evolution/0279-multiple-trailing-closures.md at master · apple/swift-evolution
参考: Swift 5.3で引数ラベルを省略したtrailing closureで表示される警告への対処方と原因

swift

1Button { 2 print("Hello, World!") 3} label: { 4 Text("placeholder") 5}

投稿2021/07/08 22:24

編集2021/07/08 22:34
hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

15bbtr135tr16wr

2021/07/09 06:01

疑問が解消されました。より分かりやすい解説をするのに頻用するVStackを例に挙げてくださったので、より理解が深まりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問