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 早日上架。
感谢鸣飞的耐心指导,还有熊主席的名言:只要思想不滑坡,办法总比问题多

你可能感兴趣的:(Swift4 解决使用 Codable JSON 转成 Model 失败的问题)