目的
本当は使い慣れているSwiftyJSON
を使いたかったけど、
止むを得ず
ナウいCodable
を使ってみたというお話です。
その前に
私としては、目新しい技術が出ても、ちょっとキャッチアップするだけで
すぐに乗り換えたりとか、使ってみようとも思わないです。
例えば、
現在一部で流行っているSwiftUI
ですが
多少キャッチアップはしているものの、到底使う気にはなりません。
こういう奴が化石脳と言われるんですねぇ。
そして、JSONデコーダーについても
Swift4から採用となったCodable
の存在は知りつつ、それでも昔から超有名なライブラリであるSwiftyJSON
を使ってました。
私の作業はアプリの運用が多く、既存でSwiftyJSON使っていたというのもあります。
やはり使い慣れているものに信頼を置いてました。
Codableなんてちょっと書きやすくなるだけでしょ
と
SwiftyJSONについて
最初にSwiftyJSON
の書き方ですが、
以下のように設定するのがありがちだと思います。
struct Data {
var title: String!
var comment: String!
init(json: JSON) {
self.title = json["title"].stringValue
self.comment = json["comment"].stringValue
}
}
上記のようなモデルを使い、以下のように設定。
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
……
数にはツッコみません。いろんな思いを持った人がいるんですよ。。。
さすがに、、
以下のように書いてるわけにはいかないなと。
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
はサーバから返ってくるプロパティ名と変数名を同じにすることで、変数定義だけで完了となります。
プロパティ設定が不要なので、コード量が半分になります。
struct Datas: Codable {
let date: [Data]
}
struct Data: Codable {
let title: String
let comment: String
//...
以下変数定義80個だけ
}
以下の様に利用します。
let datalist = try! JSONDecoder().decode(Datas.self, from: response.data)
Codableの方がSwiftyJSONよりも少ないコードで書けました。
それでも80個だぜ!どうなってるんだ。。
今後はCodableかSwiftyJSONどちらを利用するか
今後は、Codable
かSwiftyJSON
どちらを利用するかというと。
既存でSwiftyJSONを使っているアプリをわざわざ、Codableに書き直そうとは思いません。
ただ、
新規で作るアプリに関しては、Codableを利用しようと思います。
手のひら返しがすごいですが。
やはりAppleの標準ライブラリである というのが強いですね。
以上です。