最佳答案
看起来苹果新的 SwiftUI框架使用了一个 新的语法,它有效地构建了一个元组,但是有另一种语法:
var body: some View {
VStack(alignment: .leading) {
Text("Hello, World") // No comma, no separator ?!
Text("Hello World!")
}
}
试图解决这个语法实际上是 的问题时,我发现这里使用的 VStack初始化器采用类型 () -> Content的闭包
作为第二个参数,其中 Content是通过闭包推断的符合 View的通用参数。为了找出推断出的 Content类型,我对代码稍作修改,以保持其功能:
var body: some View {
let test = VStack(alignment: .leading) {
Text("Hello, World")
Text("Hello World!")
}
return test
}
通过这种方法,test显示为 VStack<TupleView<(Text, Text)>>类型,这意味着 Content是 TupleView<Text, Text>类型。查找 TupleView,我发现它是一个源自 SwiftUI本身的包装类型,只能通过传递它应该包装的元组来初始化。
提问
现在我想知道这个例子中的两个 Text实例是如何转换成 TupleView<(Text, Text)>的。这是否被分解成 SwiftUI,因此 无效的正规 Swift 语法? TupleView是 SwiftUI类型支持这个假设。或者是这个 有效的 Swift 语法?如果是的,怎么可能一个 在 SwiftUI之外使用?