Item引数

Itemを引数にもつalertモディファイアの定義は次のようになっています。
func alert<Item> (item : Binding<Item?> , content : (Item) -> Alert ) -> some View
item : アラートを表示するためのオブジェクトを先頭に$をつけて格納します。
content : itemからAlertを表示させます
itemにオブジェクトが格納されたときに、アラートを表示させます。
itemに格納するオブジェクトは、Identifiableプロトコルに準拠していて、表示するアラートの情報を持っている必要があります。
つまり、itemの値があるかどうかを確認し、値があるならアラートを呼び出すと言うことです。
使用例
//Identifiableプロトコルに準拠した構造体
struct ShowAlert : Identifiable {
var id = UUID()
var title: String
var message :String
var button : String
}
struct TestView: View {
@State var showAlert : ShowAlert?
var body: some View {
Button(action: {
//アラートオブジェクトを生成
showAlert = ShowAlert(title: "アラート", message: "itemのアラートです", button: "OK")
}, label: {
Text("アラート")
})
.alert(item : $showAlert) { item in
Alert(title: Text(item.title),
message: Text(item.message),
dismissButton: .default(Text(item.button)))
}
}
}
まず、Identifiableプロトコルに準拠したAlertオブジェクトを用意しています。
次にオブジェクトを格納する状態変数を用意し、alertモディファイアで設定します。
Buttonを押したタイミングでAlertのオブジェクトを生成させれば、Alertが表示されるようになります。
まとめ
Item引数を持つアラートは、アラート用のオブジェクトを用意して使います。
アラート用のオブジェクトは、identifiableプロトコルに準拠させる必要があります。
コメント