在SwiftUI中,经常需要根据某些条件显示“空”视图,例如:
struct OptionalText: View {
let text: String?
var body: some View {
guard let text = text else { return }
return Text(text)
}
}
不幸的是,由于guard
的主体必须返回某些视图,即text
为nil
时的“空”视图,因此无法编译。当text
为nil
时,应如何重写此示例,以便编译并呈现“空”视图?
答案 0 :(得分:11)
您必须退货。如果在某些情况下您不希望显示任何内容,请“显示”一个... EmptyView
;)
var body: some View {
Group {
if text != nil {
Text(text!)
} else {
EmptyView()
}
}
}
SwiftUI DSL将要求您将if / else包装在Group
中,并且DSL没有保护/如果让其命名。
答案 1 :(得分:5)
从Xcode 12 beta 2开始,不再需要Group
视图,并且支持if let
声明,因此生成的body
可以更加简洁:
var body: some View {
if let text = text {
Text(text)
} else {
EmptyView()
}
}
答案 2 :(得分:1)
您可以使用 @ViewBuilder
。那么你甚至不需要 EmptyView
:
@ViewBuilder
var body: some View {
if let text = text {
Text(text)
}
}
请注意,您不会返回任何东西,使用 @ViewBuilder
您只需构建您的视图。