目的

本当は使い慣れているSwiftyJSONを使いたかったけど、
止むを得ず
ナウいCodableを使ってみたというお話です。

その前に

私としては、目新しい技術が出ても、ちょっとキャッチアップするだけで
すぐに乗り換えたりとか、使ってみようとも思わないです。

例えば、
現在一部で流行っているSwiftUIですが
多少キャッチアップはしているものの、到底使う気にはなりません。

こういう奴が化石脳と言われるんですねぇ。

そして、JSONデコーダーについても
Swift4から採用となったCodable の存在は知りつつ、それでも昔から超有名なライブラリであるSwiftyJSON を使ってました。
私の作業はアプリの運用が多く、既存でSwiftyJSON使っていたというのもあります。

やはり使い慣れているものに信頼を置いてました。
Codableなんてちょっと書きやすくなるだけでしょ

SwiftyJSONについて

最初にSwiftyJSONの書き方ですが、
以下のように設定するのがありがちだと思います。

SwiftyJSONの使い方・モデル
struct Data {
    var title: String!
    var comment: String!
    
    init(json: JSON) {
        self.title = json["title"].stringValue
        self.comment = json["comment"].stringValue
    }
}

上記のようなモデルを使い、以下のように設定。

SwiftyJSONの使い方・コントローラー
guard let object = response.result.value else {
    return
}                  
let json = JSON(object)
for datalist in json["data"].arrayValue {
    let data = Data(json: datalist)
    //さらに処理
}
かなり簡潔に書けていると思います。使いやすい!

ただ、その時はやってきた

上記のSwiftyJSONの例はモデルの変数が2つです。。

ただ、
今回ぶち当たった案件はモデルの変数が80ありました。

……
80
……

数にはツッコみません。いろんな思いを持った人がいるんですよ。。。

さすがに、、
以下のように書いてるわけにはいかないなと。

SwiftyJSONのモデル変数80個
struct Data {
    var title: String!
    var comment: String!
    //...
    //...
    以下変数定義80
    
    init(json: JSON) {
        self.title = json["title"].stringValue
        self.comment = json["comment"].stringValue
        //...
        //...
        以下こちらもプロパティ80
    }
}

ということでCodableを使えば変数定義の80個の分だけで済むので、ナウい方を使うようにしました。

Codableについて

Codableはサーバから返ってくるプロパティ名と変数名を同じにすることで、変数定義だけで完了となります。
プロパティ設定が不要なので、コード量が半分になります。

Codable設定
struct Datas: Codable {
    let date: [Data]
}

struct Data: Codable {
    let title: String
    let comment: String
    //...
    以下変数定義80個だけ

}

以下の様に利用します。

Codableを利用
let datalist = try! JSONDecoder().decode(Datas.self, from: response.data)

Codableの方がSwiftyJSONよりも少ないコードで書けました。

それでも80個だぜ!どうなってるんだ。。

今後はCodableかSwiftyJSONどちらを利用するか

今後は、CodableSwiftyJSON どちらを利用するかというと。
既存でSwiftyJSONを使っているアプリをわざわざ、Codableに書き直そうとは思いません。

ただ、
新規で作るアプリに関しては、Codableを利用しようと思います。

手のひら返しがすごいですが。

やはりAppleの標準ライブラリである というのが強いですね。

以上です。