This is basically my code I have:
var myString: String?
var body: some View {
NavigationView {
if myString != nil {
CustomView(text: myString ?? "")
}
}
}
If I try without adding the ?? "" part, it doesn't work, says Value of optional type 'String?' must be unwrapped to a value of type 'String'. If I add it in as shown above, it seems to work, but why do I need to have a default empty string value if that's never going to be the case? (Since it will only reach that code if myString is not nil) Is there a way I can make this code more cleaner?
You need to use optional binding to unwrap the safely optional variable. However simply using that inside body will result in a compiler error because not all control flow (including if let) is allowed inside the body of the view, so you'll need to wrap it in another computed property.
struct MyView: View {
var myString: String?
var body: some View {
NavigationView {
innerView
}
}
var innerView: some View {
if let myString = myString {
return AnyView(CustomView(text: myString))
} else {
return AnyView(EmptyView())
}
}
}
Or you can simplify that using Optional.map.
struct MyView: View {
var myString: String?
var body: some View {
NavigationView {
myString.map { CustomView(text: $0) }
}
}
}
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