Swift 使用未声明的类型';价值镜像';使用镜子时
我正在尝试将结构映射到具有相同属性的其他类。但它一直在显示这个错误 使用未声明的类型“valueMirror” 我的代码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
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]
。您是对的,请将您的评论作为答案,以选择它作为此问题的正确答案。谢谢