苹果的新SwiftUI框架似乎使用了一种新型语法,可以有效地构建元组,但又具有另一种语法:
var body: some View {
VStack(alignment: .leading) {
Text("Hello, World") // No comma, no separator ?!
Text("Hello World!")
}
}
Run Code Online (Sandbox Code Playgroud)
尝试解决这种语法的实际含义时,我发现VStack此处使用的初始化程序将类型的闭包() -> Content
作为第二个参数,其中Content的通用参数View是通过闭包推断的。为了找出要Content推断的类型,我对代码进行了一些更改,并保持了其功能:
var body: some View {
let test = VStack(alignment: .leading) {
Text("Hello, World")
Text("Hello World!")
}
return test
}
Run Code Online (Sandbox Code Playgroud)
这样,就test表明自己是类型的VStack<TupleView<(Text, Text)>>,即Content是类型的TupleView<Text, Text>。向上看TupleView,我发现它是一个源自SwiftUI自身的包装器类型,只能通过传递应该包装的元组来初始化。
题
现在,我想知道Text这个示例中的两个实例如何转换为TupleView<(Text, Text)>。这被黑入 …
我从一个干净的项目开始,在 VStack 中添加了 5 个按钮和 5 个垫片,一切都很好。当我在底部添加第 6 个间隔时,代码突然无法编译并出现错误:“对成员'buildBlock()'的不明确引用”。
是什么导致了这个错误?这是与 SwiftUI 相关的错误吗?或者它是一个功能?这不是我第一次注意到 VStack 或 HStack 的条目数量有限,是否有相关文档?
不完全鼓舞人心,我应该切换回 UIKit 吗?