SwiftUI 重新调整 List 或 NavigationView in body: difference of return List and List in body

SwiftUI retuning List or NavigationView in body: difference of return List and List in body

我对在 SwiftUI 中返回 NavigationViewList 有疑问 body

有这样的代码片段:

    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: [=12=]))")
      }
    }

在这两个代码片段中,我可以找到 NavigationViewListreturn 关键字 为了弄清楚该语法的作用,我尝试删除 return 关键字但没有任何反应

我想知道: return 关键字有什么作用?

return用于NavigationViewList

有什么区别

在此先感谢您提供的任何帮助。

SwiftUI 语法中的某些功能可以通过称为 View Builder which is a type of Result Builder

的东西实现

使用视图生成器时,函数和计算属性具有隐式 return(即即使没有 return 关键字,最后一个语句也是 returned)。关于视图生成器中可以包含哪些类型的隐式代码还有其他特定规则,但是像您的示例包含的 let 声明是可以的。有关详细信息,请参阅 https://swiftwithmajid.com/2019/12/18/the-power-of-viewbuilder-in-swiftui/ and https://swiftontap.com/viewbuilder

SwiftUI View 是一个有趣的特例,因为 Viewvar body 属性 被解释为ViewBuilder 即使我们不必用 @ViewBuilder 显式注释它。但是,如果您要在常规函数中尝试相同的事情,并且该函数有多个语句(Swift 中的单行函数,则需要使用 @ViewBuilder 来获得类似的结果也有隐含的returns)。

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

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