【发布时间】:2020-02-07 04:48:56
【问题描述】:
这是我的枚举:
enum E {
case a(Int), b(String)
}
枚举的关联值类型是唯一的,并且始终是一个。
假设我有这个变量:
let myInt = 0
我想基于变量myInt动态地创建E 的实例。这应该会导致:
E.a(0)
但在“现实世界”中,我不知道我得到了什么属性。我只知道一件事:我可以用它初始化枚举E。我需要根据属性值动态初始化枚举。我目前在属性上有一个巨大的开关来初始化枚举,我不想要那个。
但我不知道如何完成这项任务。我尝试镜像枚举类型,但我得到了一个复杂类型,即使我知道类型,我也不知道如何继续初始化它。
所以我得到了某种类型的属性。我知道某些类型与枚举 E 中的一个 case 匹配,因为只有一种 case 的关联值对应于属性类型。我想用这种情况,用属性的值初始化那个枚举的一个实例。
【问题讨论】:
-
我不清楚为什么你不能为每个案例编写一个初始化程序并让它构造相应的案例和相关值。
-
Swift 尚不具备执行此操作所需的反射功能。一些第三方库添加了这样的支持,但我什至不会打扰 tbh。只需使用
switch。 -
是否涉及json或解码?
-
@MojtabaHosseini 不,在应用程序中,我们的操作与我提供的示例相同,但有更多案例
-
@JoshHomann 我不想编写不必要的/派生的 switch 语句/代码。有足够的信息来初始化枚举 IMO