这只会返回EmptyView
.这基本上等同于写:
@ViewBuilder func warning() -> some View {
if someWarningIsShown {
Text("WARNING")
} else {
EmptyView()
}
}
如果要编写允许返回的函数,只需在代码中省略@ViewBuilder
并按如下方式返回(请注意,通过该函数的所有路径必须返回值,并且所有路径必须返回相同类型的视图):
func warning() -> some View {
if someWarningIsShown {
return Text("WARNING")
} else {
return Text("SUCCESS")
}
}
不能编写不带@ViewBuilder
注释的函数,它返回不同的类型.例如,下面的代码将返回一个错误,告诉您该函数声明了一个不透明的返回类型,但没有返回具有相同基础类型的值.这仅适用于带有@ViewBuilder
注释的函数:
func warning() -> some View {
if someWarningIsShown {
return Text("WARNING")
} else {
return EmptyView()
}
}
根据上面的信息,我们可以确定@ViewBuilder
属性正在幕后做一些工作,当一个块不包含它可以处理的语句时,它将返回EmptyView()
.更深入地挖掘底层代码和the documentation,我们可以看到这是真的:
static func buildBlock() -> EmptyView
// Builds an empty view from a block containing no statements.