Swift4 解决使用 Codable JSON 转成 Model 失败的问题

情景描述:

Model

struct Article: Codable {
    var title: String?
    var cover_url: String?
    var content: String?
    var pp_time: String?
    var author_name: String?
    var author_avatar_url: String?
    var origin_link:String?
    var tag_list: [String]?
}

转换步骤:
Json -> Dict -> Data -> decode

if let value = value as? [String: Any], let results = value["results"] as? [[String: Any]] {
    let originJsonData = try? JSONSerialization.data(withJSONObject: results, options: [])
    if let articles = try? JSONDecoder().decode([Article].self, from: originJsonData!) {
                    completion(articles)
                }
            }

问题:

转换失败

原因:

接口返回的 tag_list 值类型为 [[String: Any]],与 model 中 tag_list 的 [String] 类型不符, 导致 model 转换失败

参考:

Working with JSON in Swift
Swift 4 Decodable and newlines \n [closed]

反思:

最近在做 iOS 项目,从接触 Codable 到运用到项目中投入 20+ 小时,期间有考虑 MarkDown , JSON , 特殊字符 \r\n 的问题,由于定位不准确,中间放弃了 Codable, 改用 SwiftyJSON , 手动写 init(json: JSON) 进行转换,昨晚和鸣飞聊到这个问题,在他的指导下重新考虑 Codable,最终找出问题的根源。我看了官网的例子很简单,没有就直接上接口数据跑,接口碰到 Mardown, JSON 等一系列问题,走了很多弯路才有比较好的理解,耗费很多精力和心力。在今后开发一定要切记:掌握基础知识点,从简单的例子开始,准确定位问题

感慨:

时隔一年重新做 iOS 项目,本以为做起来会比较顺利,没想到各种问题,深感自己对程序开发的不足,接下来十几天,开足马力,全力投入 iOS Swift 项目开发,还会有多少坑,一定要砥砺前行,让 链闻 APP 早日上架。
感谢鸣飞的耐心指导,还有熊主席的名言:只要思想不滑坡,办法总比问题多

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

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,693评论 19 139
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,228评论 3 119
  • 2018年3月19日 周一 晴 又是周一了,新的一周又开始了!希望这个周,能有进步! 一年又一年,一天有一...
    李墨儿妈妈阅读 173评论 0 0
  • 今天晨读分享的《搞定》太及时了,本书告诉我们如何横向纵向,高效处理任务成为效率达人。而我今天面临巨大的任务。看文中...
    遇见靖雯阅读 486评论 0 3

友情链接更多精彩内容