对于swiftui结构值,是否有更好的替代方法:Any?

对于swiftui结构值,是否有更好的替代方法:Any?,swiftui,Swiftui,我正在尝试实现一个应用程序,其中来自服务器调用的响应用于构建视图。视图可以是5种或6种不同类型中的一种,具体取决于返回的数据,所有这些类型对传递给它们的数据的形状和类型都有不同的要求。为传入数据定义结构/类的最佳方法是什么?到目前为止,我唯一能够让它工作的方法是使用:Any作为数据类型 这是我要做的事情的大致轮廓 struct PageViewData { type: String id: Int viewData: Any } struct MyViewA: View

我正在尝试实现一个应用程序,其中来自服务器调用的响应用于构建视图。视图可以是5种或6种不同类型中的一种,具体取决于返回的数据,所有这些类型对传递给它们的数据的形状和类型都有不同的要求。为传入数据定义结构/类的最佳方法是什么?到目前为止,我唯一能够让它工作的方法是使用:Any作为数据类型

这是我要做的事情的大致轮廓

struct PageViewData {
    type: String
    id: Int
    viewData: Any
}

struct MyViewA: View {
    type: String
    id: Int
    viewData: MyViewADataShape

    var body: some View {
        //contents here
    }
}

struct MyViewADataShape {
    navigation: [NavigationItem] 
    cta: String
}

struct MyViewB: View {
    type: String
    id: Int
    viewData: MyViewBDataShape

    var body: some View {
        //contents here
    }
}

struct MyViewBDataShape {
    pageTitle: String
    author: String
    wordCount: Int
}

var serverResponse: PageViewData = fetchDataFromServer()

if(serverResponse.type == "A") {
    MyViewA(serverResponse)
}

if(serverResponse.type == "B") {
    MyViewB(serverResponse)
}

正如Yonat提到的,
enum
在这里工作得很好:

struct页面视图:视图{
枚举响应{
案例某事(DecodableResponseA)
案例或其他案例(DecodableResponseB)
}
//如果您使用id+type来确定您的响应是什么,那么它们是
//现在不需要了,但只有你知道你用它们干什么
让id:Int
让我们回应:回应
var body:一些观点{
self.viewForResponse(响应)
}
private func viewForResponse(response:response)->some视图{
开关响应{
case.something(让something响应):返回AnyView(SomethingView())
case.orOther(let orOtherResponse):返回AnyView(OtherView())
}
}
}

我还没有找到解决方法,但我想知道是否可以使用enum来允许多个结构通过对单个变量的类型检查?是的,可以使用带有关联值的enum。非常感谢你花时间用一个编码的例子来解释这是如何工作的——对我来说,阅读苹果/第三方文档要容易得多。非常感谢!