这个错误是因为 Swift 5.3 行业中非常有用的结果构建器机制所导致的。我们可以通过将控制流语句移动到方法中来解决此错误,以便在返回结果时使用结果构建器。
例如,在以下示例代码中,我们创建了一个 MyView
的自定义视图,并在其中使用了 CommandsBuilder
构建了一组命令,这些命令将在视图显示时执行。但是,我们在尝试使用一个带有 if
语句的闭包来生成这些命令时,会遇到上述错误。
struct MyView: View {
@State private var isToggleOn = false
var body: some View {
VStack {
Toggle(isOn: $isToggleOn) {
Text("Toggle")
}
Commands {
if isToggleOn {
Button("Toggle is on") {
print("Toggle is on")
}
}
}
}
}
}
要解决此错误,我们可以将 if
语句移动到方法中,并将其作为结果构建器的参数,如下所示:
struct MyView: View {
@State private var isToggleOn = false
var body: some View {
VStack {
Toggle(isOn: $isToggleOn) {
Text("Toggle")
}
buildCommands()
}
}
@CommandsBuilder
func buildCommands() -> some Commands {
if isToggleOn {
Commands {
Button("Toggle is on") {
print("Toggle is on")
}
}
} else {
Commands {}
}
}
}
这样,我们就可以将带有 if
语句的代码从闭包中移动到方法中,并可以正常使用结果构建器进行命令构建。