SwiftUI在body中返回List或NavigationView:返回List与body中List的差异



我对SwiftUIbody内部返回NavigationViewList有疑问

有这样的代码片段:

var body: some View {
let trailingItem = HStack {
Button(action: { print("Button 1") }) {
Image(systemName: "bell")
}
Button(action: { print("Button 2") }) {
Image(systemName: "square.and.arrow.up")
}
}

return NavigationView {
Image("SwiftUI")
.navigationBarItems(trailing: trailingItem)
.navigationBarTitle("Title")
}
}

var body: some View {
let numbers = [1, 2, 3, 4, 5]
return List(numbers, id: .self) {
Text("(String(describing: $0))")
}
}

在这两个代码片段中,我可以找到NavigationViewListreturn关键字为了弄清楚语法是做什么的,我试着删除return关键字,但什么也没发生

我想知道:return关键字是做什么的?

NavigationViewList使用return有什么区别

事先感谢你能提供的任何帮助。

SwiftUI语法中的一些特性是由View Builder实现的,它是Result Builder的一种

当使用View Builder时,函数和计算属性有一个隐式返回(即最后一条语句即使没有return关键字也会返回)。关于什么类型的隐式代码可以包含在View Builder中也有其他特定的规则,但let声明像你的例子包含的是好的。更多信息请参见https://swiftwithmajid.com/2019/12/18/the-power-of-viewbuilder-in-swiftui/和https://swiftontap.com/viewbuilder。

SwiftUIViews是一个有趣的特殊情况,因为Viewvar body属性被解释为ViewBuilder,即使我们不需要显式地用@ViewBuilder注释它。然而,如果你在一个普通函数中尝试同样的事情,如果函数有多个语句,你需要使用@ViewBuilder来获得类似的结果(Swift中的单行函数也有隐式返回)。

@ViewBuilder func myView() -> some View {
Text("test")
Text("Another item")
}

因此,在您的代码示例中(因为您在var body中),使用return和省略它之间没有区别。

最新更新