使用镜像时使用未声明的类型'valueMirror'

时间:2019-12-17 12:11:05

标签: 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 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)
            }

        }
    }
}

2 个答案:

答案 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]