swift 模型转字典(模型嵌套模型)

2019-01-29  本文已影响14人  Sunshine_Boys

swift 4.0版本以后出现了Codable协议。

在Codable基础上进行 以下类型互转的时候遇到: 模型嵌套模型 (模型中包含数组模型的情况) 遇到 转换失败的问题,今天这里做一下笔记(代码没有优化,写的比较粗糙,请海涵)。
importFoundation

protocolMappable:Codable{
    funcmodelMapFinished()
    mutatingfuncstructMapFinished()
}

extension Mappable {

    //MARK: -- 模型转字典
    funcreflectToDict() -> [String:Any] {
        /// 循环 递归
        ///
        /// -Parameters:
        ///  - m: 镜像
        ///  - isArray: value 的值是否是数组
        /// -Returns: 子集 字典
        funcforDicFuntion(m:Mirror,isArray:Bool=false) -> [String:Any] {
            vardictTemp = [String:Any]()
            forcaselet(key?, value)inm.children{
                letn =Mirror(reflecting: value)
                if(n.displayStyle== .collection) {
                    vararray = [[String:Any]]()
                    forindexinn.children{
                        letx =Mirror(reflecting: index)
                        array.append(forDicFuntion(m: x,isArray:true))
                    }
                    dictTemp[key] = array
                }elseif(n.displayStyle== .set|| n.displayStyle== .optional) {
                    continue
                }else{
                    if(valueisNSNull) {continue;}
                    if(n.children.count>0){
                        if(isArray){
                            dictTemp =forDicFuntion(m: n)
                        }else{
                            dictTemp[key] =forDicFuntion(m: n)
                        }
                    }else{
                        dictTemp[key] = value
                    }
                }
            }
            returndictTemp
        }

        letmirro =Mirror(reflecting:self)
        returnforDicFuntion(m: mirro)
    }
}

使用的时候 自建model 遵循Mappable协议 即可。
例子

vardic = zhjModel.reflectToDict()

若有疑问欢迎骚扰

上一篇下一篇

猜你喜欢

热点阅读