欢迎老铁们扫码关注哦!
var body: some View {
HStack(alignment: .leading, spacing: 10) {
Text("Hello Swift")
Text("Hello SwiftUI")
Text("Hello SwiftUI Study")
}
}
不知道大家有没有问过自己,为啥在SwiftUI中可以如上面这样写?
实际上可以像上面这样去使用,得益于两个特性:Swift的尾随闭包 & FunctionBuilder。
尾随闭包
我们查看HStack的定义,发现它的init初始化函数定义如下:
@inlinable public init(alignment: VerticalAlignment = .center, spacing: CGFloat? = nil, content: () -> Content)
在init函数的定义中,最后一项是一个闭包content: () -> Content ,在Swift语法中我们知道,如果函数的最后一个参数是一个闭包,那么可以把这个闭包提到圆括号外面,那上面的代码本来应该是这样:
var body: some View {
HStack(alignment: .leading, spacing: 10, content: {
Text("Hello Swift")
Text("Hello SwiftUI")
Text("Hello SwiftUI Study")
})
}
这就是Swift中的其中一种闭包:尾随闭包。
另外在Swift中,如果某个函数只有一个参数,且这个参数是一个闭包或者这个闭包参数之前参数提供了默认值的话,可以完全省略圆括号。在上面init函数的定义中我们看到尾随闭包之前的参数都提供了默认值,所以SwiftUI中也有这样的写法:
var body: some View {
HStack {
Text("Hello Swift")
Tex