Swift 4 Codable JSONを使用してModelへの移行に失敗した問題の解決

1404 ワード

シナリオの説明:
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 [closed]
反省:
最近iOSプロジェクトをしていて、Codableに触れることから運用まで20+時間を投入していますが、その間にMarkDown、JSON、特殊文字rを考慮した問題があり、位置決めが不正確なため、途中でCodableを放棄し、SwityJSONに変更し、手動でinit(json:JSON)を書いて変換し、昨夜鳴飛とこの問題について話し合い、彼の指導の下でCodableを再考しました.最終的に問題の根源を探し出す.私は公式サイトの例を见てとても简単で、直接インタフェースのデータに行って走って、インタフェースはMardown、JSONなどの一连の问题に出会って、多くの回り道を歩いてやっと比较的に良い理解があって、多くの精力と心力を费やします.今後の開発では、基礎知識点を身につけ、簡単な例から問題を正確に位置づけなければならない.
感慨:
一年ぶりにiOSプロジェクトをやり直すと、うまくいくと思っていたが、いろいろな問題があって、自分がプログラム開発に不足していることを深く感じていた.鳴飛の辛抱強い指導に感謝し、熊主席の名言もある.