Рассмотрим ситуацию, когда мы хотим иметь словарь массивов, где каждый массив представляет собой однородную коллекцию значений некоторого типа (который может быть структурным или примитивным типом).В настоящее время я использую 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 имеет статическую типизацию, я предполагаю, что невозможно типизировать списки [Any]
, используя ключи ObjectIdentifier.Рассмотрим этот псевдокод обхода:
for (typeObjId, listOfValuesOfSometype) in myDataStructure {
// do something like swap values around in the array,
// knowing they are homogeneously but anonymously typed
}
Итак, есть ли какой-нибудь механизм метатипа, который я могу придумать, чтобы представить эту структуру данных таким образом, чтобы он не предвосхищал список фактических типов, которые будут иметь массивы?