SwiftUI的body中返回List/NavigationView时return关键字的作用差异
1. return关键字的作用
Swift 函数、计算属性、闭包中的return是标准的返回语句,作用是显式声明将其后的表达式结果作为当前作用域的返回值,你给出的示例中写return就是明确把后面构造的NavigationView/List实例作为body计算属性的返回值,这种写法兼容所有Swift版本。
你可以删掉return还能正常运行,和Swift的两个特性有关:
- 首先是单表达式隐式返回:如果一个返回值的作用域内只有一行表达式,不需要写
return,编译器会自动把该表达式的结果作为返回值,这个特性从Swift最初的版本就支持。 - 其次是Swift 5.9新增的多语句隐式返回:就算作用域内有变量声明、赋值等其他语句,只要所有执行路径最后只有一个符合返回类型的表达式,编译器也可以自动识别为返回值,不需要手动写
return。如果你用的是Swift 5.9之前的版本,你示例中body里先写let声明常量再返回View的写法,不写return会直接编译报错。
另外补充:body属性默认被@ViewBuilder修饰,如果你在body里直接写多个View(不需要外层套Stack/Group),ViewBuilder会自动把多个View打包成复合View类型返回,这种场景下本身就不需要写return。
二者没有任何差异。
不管你返回的是NavigationView、List还是其他任意符合View协议的实例,return的语法规则完全一致,和控件本身的类型没有任何关联。你在两个示例中都可以自由选择显式写return或者省略,效果完全相同。
小提示:
NavigationView从iOS 16开始已经被官方弃用,新的iOS版本推荐使用NavigationStack(单栏导航)或NavigationSplitView(多栏导航)替代。
内容的提问来源于stack exchange,提问作者Dan Choi
相关产品推荐
相关产品推荐

