SwiftのCodableはすごく便利な機能です。しかしながら時にCodableが得意ではないフォーマットを扱うことはみなさんもあるはずです。もしAPIのJSONならCodable向きにスキーマを調整できるケースも多いはずなのですが、このトークではそのような調整がそもそも不可能な例として、Appleの独自ファイルフォーマット (Apple Watchの文字盤ファイル) を見ていきます。どのようにSwiftコード側でCodableを整えていくかのテクニックをお伝えします。
文字盤ファイルを取り出して解析した人はおそらく世界に1人しかいないので簡単に説明します。アレには、文字盤の種類(写真とかSiriとか)や、左上には天気があり下にはカレンダーがある、といったデータが詰め込まれています。
そして、文字盤ファイルは取り出してシェアできます。それを解析して再合成してみました。1個の文字盤を1個のCodableなstructで表現し、Swiftらしさのある整った読み書きしやすいコードにします。そこで出てくるテクニックは他のファイルをCodableで定義するのにも役立つでしょう。
文字盤ファイルにはJSONの部分もありますが、その全体は複数のJSONやplistが画像リソースとともに詰まったフォルダ構造をしています。個別のJSONやplistには、変数名として使えないキー名が出てくるだけではなく、Unix Epochの日付とCore Data由来の2001年でオフセットされた日付の混在や、Objective-C時代のシリアライズなど、普段のCodableだったら扱いたくないような要素が次々に出てきます。これらをスマートに乗り越えていきましょう。