SwiftUI中身体的结构是什么?
嗨。我是Swift的新手,所以我有一些难以理解的代码结构。上面的代码是SwiftUi教程中的一个示例 如何将结构列成花括号?花括号是做什么用的?是那些闭包,并在这些闭包中返回一些结构的实例?我唯一能理解的是调用方法部件。SwiftUI中身体的结构是什么?,swift,xcode,swiftui,Swift,Xcode,Swiftui,嗨。我是Swift的新手,所以我有一些难以理解的代码结构。上面的代码是SwiftUi教程中的一个示例 如何将结构列成花括号?花括号是做什么用的?是那些闭包,并在这些闭包中返回一些结构的实例?我唯一能理解的是调用方法部件。 对不起,我的英语很差。神奇的是,SwiftUI视图的主体函数被定义为一种称为“函数生成器”的东西。其想法是允许SwiftUI成为Swift中的一种特定于领域的语言。您可以使用函数构建器来创建自己的DSL,函数构建器也称为“结果构建器” 例如,从“function builder
对不起,我的英语很差。神奇的是,SwiftUI视图的主体函数被定义为一种称为“函数生成器”的东西。其想法是允许SwiftUI成为Swift中的一种特定于领域的语言。您可以使用函数构建器来创建自己的DSL,函数构建器也称为“结果构建器” 例如,从“function builder”Swift语言提案中,这就是function builder的想法:
var body: some View {
ScrollView {
MapView(coordinate: landmark.locationCoordinate)
.ignoresSafeArea(edges: .top)
.frame(height: 300)
CircleImage(image: landmark.image)
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
HStack {
Text(landmark.name)
.font(.title)
FavoriteButton(isSet: $modelData.landmarks[landmarkIndex].isFavorite)
}
HStack {
Text(landmark.park)
Spacer()
Text(landmark.state)
}
.font(.subheadline)
.foregroundColor(.secondary)
Divider()
Text("About \(landmark.name)")
.font(.title2)
Text(landmark.description)
}
.padding()
}
.navigationTitle(landmark.name)
.navigationBarTitleDisplayMode(.inline)
}
另一个魔术是Swift的“尾随闭包语法”,它也被用来让许多API感觉更像控制流,或者至少是语言的一部分。SwiftUI的主体是函数吗?它似乎是一个符合视图的不透明类型变量。主体不是函数。如果您查看标题,“公共协议视图”的“body”属性标记为@ViewBuilder,而ViewBuilder是一个标记为@u functionBuilder的结构-这些“functionBuilder”东西是语法糖,让我们可以用Swift构建特定于域的语言。您可以创建自己的函数生成器:声明一个结构,将其标记为@u functionBuilder。添加至少接受一个参数的静态方法“buildBlock”。调用函数生成器时,此参数将位于大括号内。
func div(@HTMLBuilder makeChildren: () -> [HTML]) -> HTMLNode { ... }
div {
if useChapterTitles {
h1("1. Loomings.")
}
p {
"Call me Ishmael. Some years ago"
}
p {
"There is now your insular city"
}
}