在下面的代码中,我知道
body是一个只有get一部分的计算属性。return 省略 VStack但是{ .. }Vstack 之后是什么?这是初始化还是闭包?{} 里面有什么,我认为没有任何回报。
struct ContentView: View {
var body: some View {
VStack {
MapView()
.frame(height: 300)
CircleImage()
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text("Turtle Rock")
.font(.title)
HStack(alignment: .top) {
Text("Joshua Tree National Park")
.font(.subheadline)
Spacer()
Text("California")
.font(.subheadline)
}
}
.padding()
Spacer()
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您查看 的文档VStack.init,您会发现它接受的最后一个参数确实是一个闭包。这里的神奇之处在于闭包标有@ViewBuilder。
@ViewBuilder是一种函数构建器。这个想法是你传入一个包含一堆表达式,然后函数构建器将这些表达式组合成一个单一的值。这有点像返回一个数组,但使用一种可以说是更好看的语法。(虽然它不是真正的数组。闭包的返回类型由函数构建器决定。)
在您的代码中,您将返回一个包含 4 个视图的“数组”。
MapViewCircleImageVStackSpacer这些将传递给ViewBuilder,并将所有这些组合成一个View对象。
如果您想知道在每个视图末尾调用的方法在做什么,它们只是返回对调用它们的对象的轻微修改的方法。例如padding返回相同的视图,但应用了一些填充。
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |