swift - 使用 Mirror 时使用未声明的类型 'valueMirror'

标签 swift

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

Use of undeclared type '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)
            }

        }
    }
}

最佳答案

valueMirror.subjectType 就编译器而言不是一种类型。 as! 之后必须有一个编译时类型。

由于您使用 array 的唯一位置是 array.asRealMList,因此您可能只需将 value 转换为具有属性asRealMList。正如您在评论中所说,这是 Array 的扩展。

幸运的是 Array 是协变的,因此即使不知道它是什么类型的数组,您也可以将任何数组转换为 [Any]:

let array = value as! [Any]

关于swift - 使用 Mirror 时使用未声明的类型 'valueMirror',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59374008/

相关文章:

html - HTML 中的 NSAttribtuedStringt,覆盖默认文本颜色

swift - NSAttributedString 和表情符号 : issue with positions and lengths

swift - 在 Swift 中使用 _ 忽略参数是否会提高性能?

swift - 如何使用静态初始化变量重构此代码?

ios - 错误 : failed to import bridging header when trying to Archive

ios - 快速点击条形按钮项目时 UIFont 发生变化

ios - 在更新期间更改 UITableViewCells 时 swift 崩溃

ios - 在 swift 中分享单个 gif

Swift 3 - "Clickwrap"风格的 UIAlertController 隐私政策协议(protocol)

json - 如何快速从 "https://maps.googleapis.com/maps/api/place/nearbysearch/json? "获取 JSON 到数组