gpt4 book ai didi

swift - 替代 SwiftUI ViewBuilder block 中的 switch 语句?

转载 作者:可可西里 更新时间:2023-10-31 23:56:10 28 4
gpt4 key购买 nike

⚠️ 2020 年 6 月 23 日编辑:从 Xcode 12 开始,ViewBuilder 将支持 switch 和 if let 语句!

我一直在尝试使用 SwiftUI 复制我的一个应用程序。它有一个 RootViewController,它根据枚举值显示不同的 subview Controller 。与在 SwiftUI 中一样,我们使用 View 而不是 View Controller ,我的代码如下所示:

struct RootView : View {
@State var containedView: ContainedView = .home

var body: some View {
// custom header goes here
switch containedView {
case .home: HomeView()
case .categories: CategoriesView()
...
}
}
}

不幸的是,我收到警告:

Closure containing control flow statement cannot be used with function builder ViewBuilder.

那么,是否有任何替代方案可以让我复制这种行为?

最佳答案

⚠️ 2020 年 6 月 23 日编辑:从 Xcode 12 开始,ViewBuilder 将支持 switch 和 if let 语句!

谢谢大家的回答。我在 Apple 的开发论坛 上找到了解决方案。Kiel Gillard 回答了这个问题。解决方案是按照 Lu_、Linus 和 Mo 的建议将开关提取到函数中,但我们必须将 View 包装在 AnyView 中才能使其工作——如下所示:

struct RootView: View {
@State var containedViewType: ContainedViewType = .home

var body: some View {
VStack {
// custom header goes here
containedView()
}
}

func containedView() -> AnyView {
switch containedViewType {
case .home: return AnyView(HomeView())
case .categories: return AnyView(CategoriesView())
...
}
}

关于swift - 替代 SwiftUI ViewBuilder block 中的 switch 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com