推广 热搜: page  音视频  使用  选择  搜索引擎  个数  企业  百度  可以  父亲 

swift json字符串和对象模型相互转换教程和代码

   日期:2024-12-23     作者:2dmdr    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/11453.html
核心提示:之前为了封装URLNavigator路由框架,当要传递控制器的参数的时候,需要用到传json字符串,然后接收的时候再把json字符串转换成对象.

之前为了封装URLNavigator路由框架,当要传递控制器的参数的时候,需要用到传json字符串,然后接收的时候再把json字符串转换成对象.所以今天做了这个protocol协议,只要让模型的类遵守协议,然后啥都不用写,就能直接调用方法,为了进一步封装URLNavigator做准备

protocol中,之所以放在protocol而不是class类中的原因是swift不支持多重继承class但是可以多重继承protocol,因为swift不允许继承多个类,如果用户的类继承了我们的类,那么就不能再继承其他类,这样很不方便,但是放到协议里就可以同时继承类和协议,或者继承多个协议和1个类.
假如把我们的协议改成class会报错:Multiple inheritance from classes ‘NSObject’ and ‘TdwModelToJsonString’,意思是“NSObject”和“TdwModelToJsonString”类的多重继承,因为模型的类又继承了NSObject

第一段是制作了一个协议,里面添加了getString()方法,目的是把类对象,转换成json字符串,这个字符串,打印出来,是直接你能在网页上线解析的正确格式,支持无线嵌套,继承Codable协议的目的是为了使用里面的JSonEncoder().encode 和 JSonEncoder().encode 和JSonDecoder().decode()这2个方法来编码和解码,这个是swift 4.0以后苹果官方出的json编码解码协议里的方法

 
 

模型里面需要做的是知识遵守协议TdwModelToJsonString,并且给模型都添加@objc,或者在模型类前面添加@objcMembers,否则运行时候回找不到成员变量.School模型里面只添加了2个成员:name和address .重写description是为了一会打印验证结果方便,因为类对象直接打印只显示实例对象的地址

 

Student模型,friends成员变量里面嵌套了学生模型的数组,为了验证我们的方法可以支持嵌套模型的转换,这里没有在4个成员变量前边添加@objc,而是在类前面添加了@objcMembers,这样所有能转换成oc的成员变量都暴露给oc能使用的runtime机制

 
 
 

下面代码1个学校,3个学生,每个学生的 friends是对象数组,我们把对象zhang3转化成json字符串

 
 
 

这段代码jsonStr是类成员变量,保存了之前的json字符串

 

打印结果: 可以看到obj实例对象里面的成员,都被正确赋值了.

  • obj.school.address= song hua jiang bian NO.23

  • obj.friends[0]= [“age”: 20, “name”: li4, “friends”: <Swift.__EmptyArrayStorage 0x1c9e436e8>(

)
, “school”: [“address”: song hua jiang bian NO.23, “name”: 76zhong]]

swift json字符串和对象模型相互转换教程和代码

  • obj= [“age”: 30, “name”: zhang3, “friends”: <TtGCs23_ContiguousArrayStorageC16tdwModelJsonDemo7Student$ 0x6000005452c0>(
    [“name”: li4, “friends”: <Swift.__EmptyArrayStorage 0x1c9e436e8>(

)
, “age”: 20, “school”: [“address”: song hua jiang bian NO.23, “name”: 76zhong]],
[“school”: [“address”: song hua jiang bian NO.23, “name”: 76zhong], “name”: wang5, “age”: 18, “friends”: <Swift.__EmptyArrayStorage 0x1c9e436e8>(

)
]
)
, “school”: [“address”: song hua jiang bian NO.23, “name”: 76zhong]]

本文地址:http://ww.kub2b.com/news/11453.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号