美文网首页
swift 模型转字典(模型嵌套模型)

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

作者: Sunshine_Boys | 来源:发表于2019-01-29 14:59 被阅读14次

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

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

    • model -> joon

    • Model ->Dictionary

    • Dictionary ->Model

    • Dictionary -> json

    • json -> Dictionary

    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()
    

    若有疑问欢迎骚扰

    相关文章

      网友评论

          本文标题:swift 模型转字典(模型嵌套模型)

          本文链接:https://www.haomeiwen.com/subject/ggexsqtx.html