I would like to return different views from a function, a Text or a VStack of a Text and a Button. Here's one of my attempts:
func buildResponseText2() -> some View {
if (userData.success) {
return VStack {
Text("Well Done")
Button("Play Again", action: {self.userData.reset()})
}
}
return VStack {
Text("Unlucky")
}
}
This does not compile, I get the error
Function declares an opaque return type, but the return statements in its body do not have matching underlying types
Is there a way to return view containers like VStack with heterogeneous contents?
Use type erasing AnyView
as return type, as below
func buildResponseText2() -> AnyView {
if (userData.success) {
return AnyView(VStack {
Text("Well Done")
Button("Play Again", action: {self.userData.reset()})
})
}
return AnyView(VStack {
Text("Unlucky")
})
}
You were close to the solution, actually. Indeed, you can use some View
as return type this way:
func buildResponseText2() -> some View {
Group {
if userData.success {
VStack {
Text("Well Done")
Button("Play Again", action: {self.userData.reset()})
}
} else {
Text("Unlucky")
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With