[SwiftUI] ActionSheetにイベントを設置する

SwiftUIのActionSheetの選択肢を選んだ時の動作をどこに記述すればいいのかわからなかったので調べてみた。

import SwiftUI

struct ContentView: View {
    @State private var isActionSheet = false // アクションシートの表示コントロール用
    
    var body: some View {
            Button(action: {
                self.isActionSheet.toggle() // ボタンをタップした時に表示する様にする
            }) {
                Text("ActionSheet")
            }
            .padding()
            .actionSheet(isPresented: $isActionSheet, content: {
                ActionSheet(title: Text("select action"), 
                                      message: Text("SubTitle"), 
                                      buttons: [
                                              .default(Text("Save"), action: {
                                                  print("Save")  // この選択肢が選ばれた時の動作
                                              }),
                                              .destructive(Text("Delete"), action: {
                                                  print("Delete")
                                              }),
                                              .cancel()  // アクションシートを閉じるだけ
                                              ])
            })
        }
    }

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

ボタンを押した時にisShowActionSheetの値を切り替えてActionSheetの表示、非表示をコントロールしている。

ActionSheetmessageは省略が可能

buttonsの中に選択肢と選択肢ごとの動作を記述していく。

.default,.destructiveはともにaction:を省略することが可能だが、その場合ActionSheetが閉じるだけで終わってしまう。