为啥 SwiftUI 中的 getter 即使多行也不需要使用 return 关键字?
Posted
技术标签:
【中文标题】为啥 SwiftUI 中的 getter 即使多行也不需要使用 return 关键字?【英文标题】:Why the getter in SwiftUI does not need to use return keyword even if there are more than one line?为什么 SwiftUI 中的 getter 即使多行也不需要使用 return 关键字? 【发布时间】:2021-04-27 12:14:43 【问题描述】:你能帮我理解下面来自 Apple 的 SwiftUI 教程的代码吗? 我认为“body”变量是一个带有 getter 的计算属性。
据我了解,如果 getter 中有多行,则必须使用 return 关键字返回一个值。为什么下面的代码可以毫无问题地编译?
import SwiftUI
@main
struct LandmarksApp: App
@StateObject private var modelData = ModelData()
var body: some Scene
let mainWindow = WindowGroup
ContentView()
.environmentObject(modelData)
#if os(macOS)
mainWindow.commands LandmarkCommands()
#else
mainWindow
#endif
#if os(watchOS)
WKNotificationScene(controller: NotificationController.self, category: "LandmarkNear")
#endif
#if os(macOS)
Settings
LandmarkSettings()
#endif
【问题讨论】:
【参考方案1】:嗯,这里有不同的答案。
我想你会在这里找到很多关于 swift ui body/content builder 的详细答案:John Sundell - features that power SwiftUI’s API
为了快速解释,有两种行为在起作用:
类型推断 通过functionBuilder
或其他方式添加到 SwiftUI 中的糖合成器/语言
类型推断
Swift 是一种静态类型语言,这意味着我们声明的每个属性、常量和变量的类型都需要在编译时指定。然而,这通常不是需要手动完成的事情,而是编译器能够自行计算出范围广泛的类型信息——这要归功于 Swift 支持类型推断这一事实。 John Sundell
Sugar Synthax / 函数构建器
Apple 添加的新语言解决方案,使用泛型和其他技巧扩展编译器。
【讨论】:
以上是关于为啥 SwiftUI 中的 getter 即使多行也不需要使用 return 关键字?的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使发布者发出一个值,我的视图也没有在 SwiftUI 中呈现
SwiftUI:VStack 中 ForEach 中的 HStack 使多行文本重叠