假设我有一个数组的MirrorType
。
我需要获取此数组类型的元素的类型,然后创建一个此类型的新元素。
例如
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
断言。
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)
}
}