假设我有一个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
断言。
答案 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)
}
}