尾随 lambda 支持

在Jetpack Compose和SwiftUI中,尾随lambda表达式是构建UI时常用的一种语法,它允许开发者以更简洁和直观的方式编写代码。

Jetpack Compose中的尾随lambda:
在Compose中,尾随lambda表达式通常用于定义组件的内容。例如,当你使用ColumnRow等布局组件时,你可以将lambda表达式放在圆括号外部,直接在组件函数后面使用大括号定义子组件。这样做的好处是代码更加清晰,可读性更强。例如:

Column {
    Text("Hello World")
    Text("Welcome to Jetpack Compose")
}

在这个例子中,Column函数接受一个尾随lambda,其中定义了两个Text组件。

SwiftUI中的尾随lambda:
SwiftUI也支持尾随闭包(类似于lambda表达式),这在定义视图时非常有用。SwiftUI中的视图(View)通常以声明式的方式定义,你可以在视图的构造器中直接提供闭包来定义视图的内容。例如:

VStack {
    Text("Hello World")
    Text("Welcome to SwiftUI")
}

在这个例子中,VStack是一个视图构造器,它接受一个尾随闭包,定义了两个Text视图。

尾随lambda或闭包的使用,使得在Compose和SwiftUI中构建UI组件变得更加灵活和高效,同时也保持了代码的简洁性。开发者可以利用这种语法特性,以更少的代码行数实现更复杂的UI布局。

若 MoonBit 支持尾随 lambda,将成为适合构建声明式 UI 的语言

1 个赞

灵活是灵活… 某些 trailing closure 的代码放到 Moonbit 里边的看着还是蛮令人困惑的, 估计也不能原样搬了,

travel() {
    print("I'm driving in my car")
}

quote https://www.hackingwithswift.com/sixty/6/5/trailing-closure-syntax

print(“I’m driving in my car”)
=>
print { “I’m driving in my car” }

fn Button(~action?: () -> Unit, ~content: Element) {
}
Button(
    action: fn {
        // onClick
    }, 
    content: Text("Button Text")
)

=>


Button {
    Text("Button Text")
} action: fn {
    // onClick
}