I tried to set else
default param in ifLet
method but I face an error: Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements
. What did wrong?
extension View {
func ifLet<Value, Then: View, Else: View>(
_ value: Value?,
then: (Value) -> Then,
else: () -> View = { EmptyView() }
) -> _ConditionalContent<Then, Else> {
if let value = value {
return ViewBuilder.buildEither(first: then(value))
} else {
return ViewBuilder.buildEither(second: `else`())
}
}
}
Using:
struct TestView: View {
var test: String?
var body: some View {
Group {
ifLet(test) { Text($0) }
ifLet(test, then: { Text($0) }, else: { Text("Empty") })
}
}
}
The best solution without using the unofficial _ConditionalContent
that might be changed or removed in the future check out here