iOS SmartCodable 替换 HandyJSON 适配记录

前言

HandyJSON群里说建议不要再使用HandyJSON,我最终选择了SmartCodable 来替换,原因如下:

首先按照 SmartCodable 官方教程替换

大概要替换的内容如图:

详细的替换教程请前往:使用SmartCodable 平替 HandyJSON

忽略key的解析

在 SmartCodable 中可以使用 @IgnoredKey很方便的忽略解析 某个 Key

使用场景:

在 model 中 加入了一个默认不支持解析的字段,也不需要解析的时候,就需要加@IgnoredKey 来标识忽略解析
示例

swift 复制代码
class GetDailyPlansListModel: SmartCodable{
required init() { }
var should_study_time: String = ""
var dayCompareType = StudyDayCompare.today
}

编译报错
Cannot automatically synthesize 'Encodable' because 'StudyDayCompare' does not conform to 'Encodable'
修改

swift 复制代码
class GetDailyPlansListModel: SmartCodable{
required init() { }
var should_study_time: String = ""
@IgnoredKey
var dayCompareType = StudyDayCompare.today
}

项目中同时使用了WCDB 解决冲突

如果这个 model 同时要用来解析 json 和 存数据库,那么
注意了: 解析只会解析 CodingKeys 里面定义的字段
最简单的适配 :自然是将你要解析的字段在 CodingKeys 中补全
还有一个思路:将数据解析和数据缓存分别用一个 model ,这个项目逻辑复杂的话,会非常麻烦,但如果不想存多余的字段,也只有这样了

swift 复制代码
class GiftGoodsModel: SmartCodable,TableCodable {
    required init() {}
    
    var id:Int = 0 // 礼包商品id
    var ios_goods_id:String = "" // ios商品id "com.yuanlue.cxs.baijuyi",
    var name: String = "" //"庭院诗人-白居易",
    var price:Int = 0 //商品价格
    var source_price:Int = 0 //商品原价
    var pic:String = "" //商品图片
    var recommend:Bool = false //是否推荐
    
    //MARK: ==凑单
    var good_id:Int = 0 //商品id
    //MARK: ==购物车
    var count:Int = 0 //商品数量
    
    var gift_pack_id:Int? //礼包id(字段可空,有值是礼包,无值是普通商品)
    
    enum CodingKeys: String, CodingTableKey {
        typealias Root = GiftGoodsModel
        static let objectRelationalMapping = TableBinding(CodingKeys.self)
        case id
        case ios_goods_id
        case name
        case price
        case source_price
        case pic
        case recommend
        case good_id
        case count
        case gift_pack_id
    }
}

遇到解析 model 就会稍微麻烦点,要在CodingKeys 中将这个model key 加入,WCDB 不支持这种类型,就要去自定义字段映射。

详细教程前往 WCDB 官方文档查看:Swift 自定义字段映射类型

总结

以上便是我使用SmartCodable 替换 HandyJSON中遇到的值得记录的地方。改动 460个地方,替换时间 1.5 天,就是数据库冲突的解决比较耗时,如果没有跟我一样使用 WCDB 的话,替换应该挺轻松地。


感谢您的阅读和参与,HH思无邪愿与您一起在技术的道路上不断探索。如果您喜欢这篇文章,不妨留下您宝贵的赞!如果您对文章有任何疑问或建议,欢迎在评论区留言,我会第一时间处理,您的支持是我前行的动力,愿我们都能成为更好的自己!

相关推荐
zzywxc78720 分钟前
AI工具全景洞察:从智能编码到模型训练的全链路剖析
人工智能·spring·ios·prompt·ai编程
前端 贾公子1 小时前
《Vuejs设计与实现》第 16 章(解析器) 上
vue.js·flutter·ios
Digitally10 小时前
如何将大型音频文件从 iPhone 发送到不同的设备
ios·iphone
吴Wu涛涛涛涛涛Tao15 小时前
Flutter 实现「可拖拽评论面板 + 回复输入框 + @高亮」的完整方案
android·flutter·ios
搜狐技术产品小编202321 小时前
CAEmitterLayer:iOS 中创建炫酷粒子效果的魔法工具
macos·ios·objective-c·cocoa
M-finder1 天前
Mac菜单栏综合工具FancyTool更新啦
mac·swift
00后程序员张2 天前
iOS App 混淆与资源保护:iOS配置文件加密、ipa文件安全、代码与多媒体资源防护全流程指南
android·安全·ios·小程序·uni-app·cocoa·iphone
咕噜签名分发冰淇淋2 天前
内测分发是什么?
ios
2501_916007472 天前
Transporter App 使用全流程详解:iOS 应用 ipa 上传工具、 uni-app 应用发布指南
android·ios·小程序·https·uni-app·iphone·webview