根据变量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
的值包含一个值,则显示警报。
我的代码中的错误在哪里?
答案 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 })
}
}
}