美文网首页
swift4 字典->模型-相互转换

swift4 字典->模型-相互转换

作者: 好快的刀 | 来源:发表于2018-02-05 16:01 被阅读0次

1.swift4出现了 Codable协议,只要继承该协议,便可使用系统的模型转换,字典转模型,模型转字典。

2.本人重新封装了一下decode方法

数据转模型,多个和多个 模型转json、字典

3.调用

比如你有一个这样的模型和字典

struct People: Codable{

    var age: Int?

    var money: Double?

}

let dic: [String:Any] = ["age":23,"money":9833.67]

便可以调用字典转模型

if let model = try? LsqDecoder.decode(People.self, param: dic){

          print(model)

  }

//这里返回的模型就为传的模型类型,如果字典中没有找到该key,或者值的类型对应不上,则不会赋值,为nil。

附上源代码:

structLsqDecoder {

    //TODO:转换模型(单个)

    publicstaticfuncdecode(_type:T.Type, param: [String:Any]) ->T?whereT:Decodable{

        guardletjsonData =self.getJsonData(with: param)else{

            returnnil

        }

        guardletmodel =try?JSONDecoder().decode(type, from: jsonData)else{

            returnnil

        }

        returnmodel

    }

    //多个

    publicstaticfuncdecode(_type:T.Type, array: [[String:Any]]) -> [T]?whereT:Decodable{

        ifletdata =self.getJsonData(with: array){

            ifletmodels =try?JSONDecoder().decode([T].self, from: data){

                returnmodels

            }

        }else{

            print("模型转换->转换data失败")

        }

        returnnil

    }

    privatestaticfuncgetJsonData(with param:Any)->Data?{

        if !JSONSerialization.isValidJSONObject(param) {

            returnnil

        }

        guardletdata =try?JSONSerialization.data(withJSONObject: param, options: [])else{

            returnnil

        }

        returndata

    }

}

//模型转字典,或转json字符串

structLsqEncoder {

    publicstaticfuncencoder(toString model:T) ->String?whereT:Encodable{

        letencoder =JSONEncoder()

        encoder.outputFormatting = .prettyPrinted

        guardletdata =try? encoder.encode(model)else{

            returnnil

        }

        guardletjsonStr =String(data: data, encoding: .utf8)else{

            returnnil

        }

        returnjsonStr

    }

    publicstaticfuncencoder(toDictionary model:T) ->[String:Any]?whereT:Encodable{

        letencoder =JSONEncoder()

        encoder.outputFormatting = .prettyPrinted

        guardletdata =try? encoder.encode(model)else{

            returnnil

        }

        guardletdict =try?JSONSerialization.jsonObject(with: data, options: .mutableLeaves)as? [String:Any]else{

            returnnil

        }

        returndict

    }

}

相关文章

  • swift4 字典->模型-相互转换

    1.swift4出现了Codable协议,只要继承该协议,便可使用系统的模型转换,字典转模型,模型转字典。 2.本...

  • iOS 使用Runtime机制将模型(对象)和字典相互转换

    在我们常见开发中往往需要将模型(对象)和字典相互转换,字典转模型(对象)相对简单,可以用系统方法快速实现,而模型(...

  • Flutter技术点

    1.字典(Map)、JSON、模型相互转换 打印结果 模型数据 2.网络get请求数据 1.返回数据模型 2.发起...

  • python 字典和类属性的相互转换, 及参数的传递方法 / a

    python argparse 用法总结python 字典类和属性类的相互转换+模型训练的时候参数的传递方法Pyt...

  • OC NSData与NSString、UIImage、Byte

    NSData与NSString的相互转换: NSData与UIImage的相互转换: NSData与字典或者数组的...

  • MJExtension简单介绍及使用

    MJExtension是一套字典和模型之间互相转换的超轻量级框架 1、字典(JSON) --> 模型(Model)...

  • Runtime字典转模型

    用一个分类实现字典转模型,分类头文件如下: 如果模型的属性有字典数组,想要将该字典数组转换成模型数组,那么在该模型...

  • MJExtension字典转模型

    用MJExtension字典(字典OK)转模型,获得的模型,始终有问题,一直怀疑是MJExtension转换有问题...

  • MJExtension<转>

    世界上转换速度最快、使用最简单方便的字典转模型框架 能做什么? MJExtension是一套字典和模型之间互相转换...

  • iOS MJExtension详解

    在项目中模型是必不可少的, 那么字典转换模型就显得格外重要. 字典转模型我使用的是MJExtension, 想必大...

网友评论

      本文标题:swift4 字典->模型-相互转换

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