оповещения в соответствии с утверждением «если» - PullRequest
1 голос
/ 18 октября 2019

В зависимости от значения переменной 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 Ответ

1 голос
/ 18 октября 2019

Я полагаю, что когда вы кодируете такой код, 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 })
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...