Swift:如何获得具有可用数组MirrorType的数组元素类型

时间:2015-05-23 20:00:08

标签: ios swift generics reflection

假设我有一个MirrorType数组。

我需要获取此数组类型的元素类型,然后创建此类型的新元素。

e.g。

let elementType : Any.Type = some_magic_function(arrayMirrorType)
var arrayElement = some_magic_element_constructor(elementType)

我认为可以将arrayMirrorType.valueType转换为Array<Any>.Type,例如

let arrayType = arrayMirrorType.valueType as! Array<Any>.Type
let elementType = arrayType.Generator.Element

但是转向Array<Any>.Type断言。

1 个答案:

答案 0 :(得分:2)

Array<Any>.Type不是Array<String>.Type的子类型,因此结果为nil并且您获得强制转换的断言。

这里可以做的是迭代数组反射并查询每个项目的类型。

let arrayMirrorType = reflect(array)

...

for var i = 0; i<arrayMirrorType.count; i++ {
    let elementType = arrayMirrorType[i].1.valueType

    if let intElementType = elementType as? Int.Type {
        let newElement = intElementType(777)
    }
}