我想将两个唯一的警报附加到同一Button视图。当我使用下面的代码时,只有底部的警报起作用。
Button
我正在macOS Catalina上使用Xcode 11的正式版本。
@State private var showFirstAlert = false @State private var showSecondAlert = false Button(action: { if Bool.random() { showFirstAlert = true } else { showSecondAlert = true } }) { Text("Show random alert") } .alert(isPresented: $showFirstAlert) { // This alert never shows Alert(title: Text("First Alert"), message: Text("This is the first alert")) } .alert(isPresented: $showSecondAlert) { // This alert does show Alert(title: Text("Second Alert"), message: Text("This is the second alert")) }
我希望在设置showFirstAlert为true 时显示第一个警报,而在我设置为true时希望显示第二个警报showSecondAlert。只有第二个警报显示其状态为true时,但第一个警报不执行任何操作。
showFirstAlert
showSecondAlert
第二个调用.alert(isPresented)覆盖了第一个。您真正想要的是Binding<Bool>指示是否显示警报,以及应该从闭包后面返回警报的某种设置.alert(isPresented)。您可以为此使用Bool,但是我继续使用枚举来完成此操作,因为它扩展为两个以上的警报。
.alert(isPresented)
Binding<Bool>
enum ActiveAlert { case first, second } struct ToggleView: View { @State private var showAlert = false @State private var activeAlert: ActiveAlert = .first var body: some View { Button(action: { if Bool.random() { self.activeAlert = .first } else { self.activeAlert = .second } self.showAlert = true }) { Text("Show random alert") } .alert(isPresented: $showAlert) { switch activeAlert { case .first: return Alert(title: Text("First Alert"), message: Text("This is the first alert")) case .second: return Alert(title: Text("Second Alert"), message: Text("This is the second alert")) } } } }