对于swiftui结构值,是否有更好的替代方法:Any?
我正在尝试实现一个应用程序,其中来自服务器调用的响应用于构建视图。视图可以是5种或6种不同类型中的一种,具体取决于返回的数据,所有这些类型对传递给它们的数据的形状和类型都有不同的要求。为传入数据定义结构/类的最佳方法是什么?到目前为止,我唯一能够让它工作的方法是使用:Any作为数据类型 这是我要做的事情的大致轮廓对于swiftui结构值,是否有更好的替代方法:Any?,swiftui,Swiftui,我正在尝试实现一个应用程序,其中来自服务器调用的响应用于构建视图。视图可以是5种或6种不同类型中的一种,具体取决于返回的数据,所有这些类型对传递给它们的数据的形状和类型都有不同的要求。为传入数据定义结构/类的最佳方法是什么?到目前为止,我唯一能够让它工作的方法是使用:Any作为数据类型 这是我要做的事情的大致轮廓 struct PageViewData { type: String id: Int viewData: Any } struct MyViewA: View
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。非常感谢你花时间用一个编码的例子来解释这是如何工作的——对我来说,阅读苹果/第三方文档要容易得多。非常感谢!