在SwiftUI中显示一个空视图

时间:2020-04-02 09:38:54

标签: ios swift macos swiftui

在SwiftUI中,经常需要根据某些条件显示“空”视图,例如:

struct OptionalText: View {
  let text: String?

  var body: some View {
    guard let text = text else { return }

    return Text(text) 
  }
}

不幸的是,由于guard的主体必须返回某些视图,即textnil时的“空”视图,因此无法编译。当textnil时,应如何重写此示例,以便编译并呈现“空”视图?

3 个答案:

答案 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 您只需构建您的视图。