【发布时间】:2019-04-23 06:16:20
【问题描述】:
考虑一种情况,我们想要一个数组字典,每个数组都是某种类型(可能是结构或原始类型)值的同质集合。我目前正在使用定义它的类型的 ObjectIdentifier:
let pInts : [UInt32] = [4, 6, 99, 1001, 2032]
let pFloats : [Float] = [3.14159, 8.9]
let pBools : [Bool] = [true, false, true]
let myDataStructure : [ObjectIdentifier : [Any]] = [
ObjectIdentifier(Float.self) : pFloats,
ObjectIdentifier(UInt32.self) : pInts,
ObjectIdentifier(Bool.self) : pBools
]
这里的问题是,在遍历数据结构时,Swift 并不知道每个列表中的对象是同质的。由于 swift 是静态类型的,我猜不可能使用 ObjectIdentifier 键对 [Any] 列表进行类型转换。考虑这个遍历伪代码:
for (typeObjId, listOfValuesOfSometype) in myDataStructure {
// do something like swap values around in the array,
// knowing they are homogeneously but anonymously typed
}
那么,是否有一些元类型机制我可以用某种方式来表示这个数据结构,而不是预期其中包含数组的实际类型列表?
【问题讨论】:
-
具有关联类型的枚举是一个选项吗?例如
enum ObjectIdentifier { case ints([UInt32]), floats([Float]), bools([Bool]) } -
有趣的问题。我认为这也不可能。你为什么需要这个?也许有不同的方式来实现你的实际目标。
标签: swift dictionary metatype