我对SwiftUIbody
内部返回NavigationView
和List
有疑问
有这样的代码片段:
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))")
}
}
在这两个代码片段中,我可以找到NavigationView
和List
的return
关键字为了弄清楚语法是做什么的,我试着删除return
关键字,但什么也没发生
我想知道:return
关键字是做什么的?
NavigationView
和List
使用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。
SwiftUIView
s是一个有趣的特殊情况,因为View
的var body
属性被解释为ViewBuilder
,即使我们不需要显式地用@ViewBuilder
注释它。然而,如果你在一个普通函数中尝试同样的事情,如果函数有多个语句,你需要使用@ViewBuilder
来获得类似的结果(Swift中的单行函数也有隐式返回)。
@ViewBuilder func myView() -> some View {
Text("test")
Text("Another item")
}
因此,在您的代码示例中(因为您在var body
中),使用return
和省略它之间没有区别。