我有几个格式如下的 ENUM:
enum class MyEnum1(val id: Int, val titleId: Int) {
A1(0, R.string.a1),
B1(1, R.string.b1),
...
}
enum class MyEnum2(val id: Int, val titleId: Int) {
A2(0, R.string.a2),
B2(1, R.string.b2),
...
}
我还有一个“撰写”对话框,其中列出了这些值,但现在我拥有所有这些枚举 在将其作为参数传递给对话框组件之前,首先将其转换为
List<Pair<Int,Int>>
。
如何使 Compose 函数具有任何 Enum 类类型的参数? 我想这样称呼我的可组合项:
ListDialog( ..., enum = MyEnum1::class, ...)
also
ListDialog( ..., enum = MyEnum2::class, ...)
然后处理我的数据:
for (item in enum.values()) {
// something
}
我确实没有 Compose 的经验,所以我不确定这一切是如何工作的,但我总体上有 kotlin 的经验。您可以做的是让所有枚举实现一个通用接口。那么这是可能的,例如:
fun main() {
test(MyEnum1.values())
test(MyEnum2.values())
}
fun <T : EnumsWithIdAndTitle> test(enum: Array<T>){
for (item in enum) {
println(item.titleId)
}
}
interface EnumsWithIdAndTitle {
val id: Int
val titleId: Int
}
enum class MyEnum1(override val id: Int, override val titleId: Int) : EnumsWithIdAndTitle {
A1(0, 11),
B1(1, 22),
}
enum class MyEnum2(override val id: Int, override val titleId: Int) : EnumsWithIdAndTitle {
A2(0, 33),
B2(1, 44),
}
那么你可以用我认为类似的方式修改你的
test
,而不是我的ListDialog
函数