SwiftUI:alert()とsheet()はオプション値と一緒に使用されます.

1886 ワード

SwiftUIには2つのアラームとフォームを作成する方法があります.これまではブール値に結びつけられていました.このブール値はtrueになるとAlertまたはSheetを表示します.
第二の方法は、常に使用されていないが、必要なときには、条件としてオプションのIdentifiableオブジェクトを使用してもよく、オブジェクトが値を持っているときには、AlertまたはSheetを表示します.そのクローズドは条件のための非オプション値を提供しますので、安全に使えます.
この点を説明するために、Identifiableプロトコルに適合する簡単なUser構造体を作成することができます.
struct User: Identifiable {
    var id = "Taylor Swift"
}
その後、ContentViewにおいて、どのユーザが選択されたかを追跡する属性を作成してもよく、デフォルトではnilに設定されています.
@State private var selectedUser: User? = nil
次に、ContentViewbodyを変更して、テキストビューをクリックするときにselectedUserを値に設定し、selectedUserに値を提供するときにalert(item:)を使ってアラームを表示します.
Text("Hello, World!")
    .onTapGesture {
        self.selectedUser = User()
    }
    .alert(item: $selectedUser) { user in
        Alert(title: Text(user.id))
    }
このシンプルコードを使うと、「ハロー、World!」をクリックするたびに、「Taylor Swift」というアラームが発生します.アラーム解除後、SwiftUIはselectedUsernilに設定します.
これは簡単な機能のようですが、他の機能よりも簡単で安全です.古い.alert(isPresente:)修飾子を使って上記のコードを書き換えると、このように見えます.
struct ContentView: View {
    @State private var selectedUser: User? = nil
    @State private var isShowingAlert = false

    var body: some View {
        Text("Hello, World!")
            .onTapGesture {
                self.selectedUser = User()
                self.isShowingAlert = true
            }
            .alert(isPresented: $isShowingAlert) {
                Alert(title: Text(selectedUser!.id))
            }
    }
}
それはもう一つの属性で、onTapGesture()にもう一つの値を設定し、alert()の修飾子に強制的に展開させます.これらのことを避けることができれば、よろしくお願いします.
Alert弾道場SwiftUIを参照してください.アクションSheet弾道場Swift UI:Sheetビュー
Using alert()and sheet()with optionsから訳されます.