我正在尝试将结构映射到具有相同属性的其他类。但它一直显示此错误
使用未声明的类型'valueMirror'
我的代码
extension Mapper {
func map<T:Object>(to type: T.Type){
let object = T()
let m = Mirror(reflecting: self)
for property in m.children {
guard let key = property.label else { continue }
let value = property.value
let valueMirror = Mirror(reflecting: value)
if valueMirror.displayStyle == .collection {
let array = value as! valueMirror.subjectType // <-- error
object.setValue(array.asRealMList, forKey: key)
} else {
object.setValue(value, forKey: key)
}
}
}
}
答案 0 :(得分:0)
valueMirror.subjectType
的类型为Any.Type
。
您可能想将value
投射到Any
。
答案 1 :(得分:0)
valueMirror.subjectType
不是一种类型。 as!
之后必须有一个编译时间类型。
由于您使用array
的唯一位置在array.asRealMList
中,因此您可能只需要将value
转换为具有属性asRealMList
的类型。正如您在评论中所说,这是Array
的扩展名。
幸运的是,Array
是协变的,因此即使不知道数组是哪种类型,也可以将任何数组强制转换为[Any]
:
let array = value as! [Any]