为什么SwiftUI喜欢抛出类似的错误
包含控制流语句的封闭不能与函数生成器'ViewBuilder'一起使用
[当我只是尝试类似的东西时
VStack {
for i in 0...10 {
Text("Hello, world!")
}
}
它不会编译。为什么要迅速护理? SwiftUI框架如何甚至检测是否存在控制流语句并抛出错误?
SwiftUI框架甚至如何检测是否存在控制流语句并引发错误?
不是。 Swift language(即compiler)检测到此情况。这不是“抛出错误”,而是说您的代码在语法上无效,因此无法对其进行编译。
要知道为什么,问问自己语法是什么
VStack {
// ...
}
它是由function builder介导的VStack结构的初始化程序,它从根本上改变了Swift语法的工作方式,将其转变为特定领域的语言。您正在调用此方法:
https://developer.apple.com/documentation/swiftui/vstack/3278367-init
花括号中的东西是最后一个参数:
@ViewBuilder content: () -> Content
因此,这是一个必须返回Content的函数的函数体,Content是一种View。由于函数构建器的工作方式,您唯一可以做的就是返回一个View;或者,感谢函数构建器,您可以说出一系列View对象,它们将为您组合并返回。这就是all,您可以在这种情况下这样做。
您的用例正是提供ForEach结构的原因:这样您就可以在函数生成器的域内循环生成View对象。