最新动态
swift json字符串和对象模型相互转换教程和代码
2024-12-23 10:27

之前为了封装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]]

    以上就是本篇文章【swift json字符串和对象模型相互转换教程和代码】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/news/11453.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
核心城市土地市场升温 地块成交楼面价频创新高
  随着楼市逐步显现企稳迹象,土地市场也持续升温。3月份,北京、杭州、成都等核心一线、二线城市均有地块成交楼面价创出新高
欧洲将为乌克兰提供价值两百万枚炮弹的资金
据乌克兰国家通讯社报道,乌克兰总理什米哈尔在电视上称,在布鲁塞尔举行的欧盟-乌克兰联盟理事会会谈期间,讨论了为乌克兰国防
咸宁佳能发布EOS R5 Mark II,摄影爱好者迎...工业手机「咸宁佳能发布EOS R5 Mark II,摄影爱好者迎...」
烟台惠诚佳业电子科技有限公司成立于2017年,公司从计算机软、硬件营销,发展成为现今以投影机、数码相机、摄像机营销,多媒体投
拳皇VS街霸街头霸王下载手机版「拳皇VS街霸」
拳皇VS街霸是一款动作格斗游戏,在游戏中玩家会体验到丰富的皇斗玩法,一切都值得玩家去体验,成为一名格斗高手,不断地进行在手
陪嫁火缸是啥?杭州有饭店收藏这份“时光密码”,炭火煨出娘家味道
潮新闻客户端 记者 孙韵在浙江部分地区,上世纪80年代还有陪嫁火缸。它们看着像水缸,但其实里面烧炭,上面可以用砂锅或者瓦罐煨
朝鲜有5条奇葩规矩,千万不能碰!一不小心有可能“小命不保”朝鲜手机「朝鲜有5条奇葩规矩,千万不能碰!一不小心有可能“小命不保”」
朝鲜是全世界最神秘的国家之一,也是我们的邻居,许多游客都想去朝鲜旅游,看一看这个神秘的国度。不过,去之前一定要了解当地这
小米手机怎么投屏电视小米手机怎么投屏到电视「小米手机怎么投屏电视」
使用小米手机投屏电视的步骤:确保手机和电视连接到同一 Wi-Fi 网络。在小米手机上开启投屏功能(从屏幕顶部向下滑动,点击“投
小屏旗舰复兴:除了OVM,华为、荣耀也要加入战局!小屏旗舰手机「小屏旗舰复兴:除了OVM,华为、荣耀也要加入战局!」
回顾过去几年,随着大屏幕、高刷新率和全面屏技术的普及,智能手机屏幕尺寸逐渐膨胀至6.7英寸左右,这也让新机的堆料程度变得很
手机运行内存有什么用手机运行内存是什么意思「手机运行内存有什么用」
在智能手机日益普及的今天,我们经常会听到“运行内存”这个词。对于很多非专业人士来说,可能并不清楚手机运行内存(RAM)到底
手机进水了怎么排水手机进水了「手机进水了怎么排水」
手机进水了是很多人都可能遇到的情况,比如不小心把手机掉进水里,或者在下雨天被淋湿了。手机进水了会影响手机的性能,甚至导致