Swift 使用未声明的类型';价值镜像';使用镜子时

Swift 使用未声明的类型';价值镜像';使用镜子时,swift,Swift,我正在尝试将结构映射到具有相同属性的其他类。但它一直在显示这个错误 使用未声明的类型“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 le

我正在尝试将结构映射到具有相同属性的其他类。但它一直在显示这个错误

使用未声明的类型“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)
            }

        }
    }
}
扩展映射器{
函数映射(到类型:T.type){
设object=T()
设m=镜子(反射:自身)
对于m.children中的财产{
guard let key=property.label else{continue}
让value=property.value
让值镜像=镜像(反射:值)
如果valueMirror.displayStyle==.collection{

让数组=值为!valueMirror.subjectType/
valueMirror.subjectType
的类型为
Any.type

您可能希望将
强制转换为
任何
值镜像。就编译器而言,subjectType
不是一个类型。在
as!
之后必须有一个编译时类型

由于使用
array
的唯一位置是
array.asRealMList
,您可能只需要将
value
强制转换为具有属性
asRealMList
的类型。正如您在注释中所说,这是
array
的扩展

幸运的是,
Array
是协变的,因此即使不知道它是哪种类型的数组,您也可以将任何数组强制转换为
[any]

let array = value as! [Any]

在哪个类型中声明了
asRealMList
?您应该将
value
强制转换为该类型,而不是
valueMirror.subjectType
,因为
valueMirror.subjectType
不是编译器所关心的类型。@Sweeper我想将数组映射到领域列表,所以源对象有数组,目标有列表因此,我使用数组扩展将数组映射到域列表。然后改为尝试
as![Any]
。您是对的,请将您的评论作为答案,以选择它作为此问题的正确答案。谢谢