繁体   English   中英

SwiftUI 在正文中重新调整 List 或 NavigationView:正文中返回 List 和 List 的区别

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

我有关于在 SwiftUI body内返回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))")
      }
    }

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

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

NavigationViewList使用return什么区别

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

SwiftUI 语法中的一些功能是通过称为View Builder的东西实现的,它是一种Result Builder

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM