[英]SwiftUI NavigationView with List programmatic navigation does not work
[英]SwiftUI retuning List or NavigationView in body: difference of return List and List in body
我有关于在 SwiftUI body
内返回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
使用视图构建器时,函数和计算属性具有隐式返回(即,即使没有return
关键字也返回最后一条语句)。 关于可以在视图构建器中包含哪些类型的隐式代码,还有其他特定规则,但let
像您的示例包含的声明一样没问题。 有关更多信息,请参阅https://swiftwithmajid.com/2019/12/18/the-power-of-viewbuilder-in-swiftui/和https://swiftontap.com/viewbuilder 。
SwiftUI View
是一个有趣的特例,因为View
的var 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.