SwiftUI为啥可以这样写代码?

本文探讨了SwiftUI中可以简洁编写代码的原因,主要涉及两个关键特性:尾随闭包和FunctionBuilder。尾随闭包允许将闭包移到函数调用的外面,而FunctionBuilder通过@_functionBuilder注解改变了编译器处理闭包的方式,使得在SwiftUI中可以省略返回值。文章详细解释了FunctionBuilder的工作原理,并指出其在定义DSL时的重要性。
摘要由CSDN通过智能技术生成

iOS进化论
欢迎老铁们扫码关注哦!

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值