首页 > 解决方案 > 在 SwiftUI 中返回泛型 View 类型的方法

问题描述

进入 SwiftUI 并遇到了障碍。对于我的应用程序主屏幕,我想要一个结构来筛选各种状态并根据条件返回适当的视图。

在 Swift 中,我通常会应用某种“管理器”对象来查看数据状态并返回一个继承自 UIView 的类——但尝试在 SwiftUI 中做同样的事情会给我带来一些问题——这里的示例:

struct HomeScreenViewDirector {
     func fetchView() -> View {
        if someDataState {
            return PopulatedHomeScreen()
        } else {
            return EmptyView()
        }
    }
}
struct EmptyHomeScreen: View {
    var body: some View {
        HStack {
            navigationBarTitle("Empty State")
        }
    }
}
struct PopulatedHomeScreen: View {
    var body: some View {
         navigationBarTitle("Populated State")
    }
}

尝试这样做会产生错误

Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements

-> View返回类型上。从一些研究来看,我似乎可以将其更改为some View然后将我的所有回报包装为AnyView但感觉这是错误的方法。

关于如何以及为什么处理这个问题的任何提示

干杯!

标签: swiftui

解决方案


试试这个

struct HomeScreenViewDirector {
    let someDataState: Bool // << seems should be this as well?

    @ViewBuilder
     func fetchView() -> some View {
        if someDataState {
            PopulatedHomeScreen()
        } else {
            EmptyView()
        }
    }
}

推荐阅读