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