根据“如果”声明发出警报

时间:2019-10-18 05:17:21

标签: ios swift swiftui

根据变量name的值,我需要显示一个警报,如果为空,则必须向我显示警报,如果它们包含值,则必须向我显示另一个不同的警报,即我的代码使用如下:

struct ContentView : View {
    var name = ""

    @State private var showAlert = false
    @State private var showAlertok = false

    var alert: Alert {
        Alert(title: Text("Error"), message: Text("it is empty"), dismissButton: .default(Text("OK")) )
    }

    var alertok: Alert {
        Alert(title: Text("Message"), message: Text("It's not empty"), dismissButton: .default(Text("Ok")) {
            // here action
            print("OK button tapped")

            })
    }



    var body: some View {

        VStack {
            Text("Title")

            Button(action: {

                if self.name.isEmpty {
                    print("it is empty")
                    self.showAlert.toggle()


                } else {

                    print("It's not empty")
                    self.showAlertok.toggle()

                }


            }) {

                HStack{
                    Image(systemName: "arrow.right.circle.fill")
                    Text("SEND")
                        .padding(.horizontal)
                }
                .padding()
                .foregroundColor(Color.white)
                .background(Color.purple)
                .cornerRadius(.infinity)

            }   .alert(isPresented: $showAlert, content: { self.alert })
                .alert(isPresented: $showAlertok, content: { self.alertok })
        }
    }
}

在前面的代码中,如果name为空,则警报不起作用,它仅向我显示控制台上print("it is empty")的值。如果name的值包含一个值,则显示警报。

我的代码中的错误在哪里?

1 个答案:

答案 0 :(得分:1)

我想当您像SwiftUI这样的代码接受最后一个时,您会看到“不是空警报”。但是,如果只编写一个“ .alert”块,则可以同时看到两个警报。这是我的解决方法。

struct ContentView : View {
    var name = ""
    @State private var showAlert = false

    var alert: Alert {
        Alert(title: Text("Error"), message: Text("it is empty"), dismissButton: .default(Text("OK")) )
    }

    var alertok: Alert {
        Alert(title: Text("Message"), message: Text("It's not empty"), dismissButton: .default(Text("Ok")) {
            // here action
            print("OK button tapped")

            })
    }

    var body: some View {

        VStack {
            Text("Title")

            Button(action: {

                self.showAlert.toggle()
            }) {
                HStack{
                    Image(systemName: "arrow.right.circle.fill")
                    Text("SEND")
                        .padding(.horizontal)
                }
                .padding()
                .foregroundColor(Color.white)
                .background(Color.purple)
                .cornerRadius(.infinity)
            }
            .alert(isPresented: $showAlert, content: { name.isEmpty ? self.alert : self.alertok })
        }
    }
}