Json转模型2--objectMapple

objectMapple 是一款在Swift下非常好用的数据转模型工具,类似MJExtension

pod引入工程

pod 'ObjectMapper'

import进行声明导入,并创建数据模型

import ObjectMapper

创建数据模型需要遵守Mapple协议和两个协议方法

struct HousesBaseInfo: Mappable {
    init?(map: Map) {
        
    }
    
    mutating func mapping(map: Map) {


    }
}

当然也可以用class来创建模型,如果不需要继承的话,建议直接用struct创建模型

根据数据创建模型

首先来看我们的数据,根据数据我们创建模型

let baseInfo: [String : Any] = ["build_name":"置信·原墅",
                                "build_address":"学院中路与金桥路交汇处东北侧",
                                "area_address":"浙江省温州市鹿城区五马街道",
                                "build_num": 12,
                                "detail_address":["province":"浙江省",
                                                  "city":"温州市"]
struct HousesBaseInfo: Mappable {
    var build_name: String?
    var build_address: String?
    var build_num: Int = 0
    var detail_address: DetailAddressModel?
    
    init?(map: Map) {
        
    }
    mutating func mapping(map: Map) {
        build_name      <- map["build_name"]
        build_address   <- map["build_address"]
        build_num       <- map["build_num"]
        detail_address  <- map["detail_address"]
    }
    var description: String {
        get {
            return Mapper().toJSONString(self, prettyPrint: true)!
        }
    }
}

struct DetailAddressModel: Mappable {
    var province: String?
    var city: String?
    init?(map: Map) {
        
    }
    mutating func mapping(map: Map) {
        province    <- map["province"]
        city        <- map["city"]
    }
}

<-是一个泛型函数,挺形象的
description中的Mapper().toJSONString(self, prettyPrint: true)!是为了方便用来打印出来看看解析结果

使用

// 这样就得到了模型
let basedata: HousesBaseInfo = Mapper<HousesBaseInfo>().map(JSONObject: self.baseInfo)!
// 打印出来看看
DPrint(message: basedata.description)
/*
{
  "build_name" : "置信·原墅",
  "build_address" : "学院中路与金桥路交汇处东北侧",
  "detail_address" : {
    "city" : "温州市",
    "province" : "浙江省"
  },
  "build_num" : 12
}
*/

注意

使用过程中如果有类型为array最好初始化一个空数组[], 例如

var detail_address: [DetailAddressModel] = []

方便以后用到array属性的时候的转换可选值类型拆包弄得繁琐,还有一些基本类型Int等附上初值,当解析失败得到为nil的时候不会因为强转类型!而崩溃

Mapper<xxxxModel>().map通过联想可以看到很多构造方法,和返回值类型,常用的有如下,还有很多可以自行选择方法

let model = Mapper<DetailAddressModel>().map(JSONObject: <Any>?)
let model = Mapper<DetailAddressModel>().map(JSONString: <String>?)
let model = Mapper<DetailAddressModel>().mapArray(JSONObject: <Any>?)
let model = Mapper<DetailAddressModel>().mapArray(JSONString: <String>?)

也可以

let model = DetailAddressModel(JSON:   )
let model = DetailAddressModel(JSONString:   )
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,940评论 6 13
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 43,005评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,081评论 19 139
  • 6月16日下午两点多。 坐在猫的天空之城看书(真是趣怪的店名!),读到这样一个问题:“给这一天定个什么名字?(试着...
    梅晓云阅读 344评论 1 2
  • 你觉得对的事情,坚持就好了。 将来的事,留给将来。 谁也无法代替你对自己的人生做出选择,每个人的人生和时光都是无法...
    晚晴灬阅读 211评论 0 0

友情链接更多精彩内容