89
83

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift4 Codableがすごすぎた件

Last updated at Posted at 2017-12-16

Swift4から新たにFoundationに追加されたCodableプロトコルがすごすぎたのでご紹介。

API通信でデータを取得する際に、JSONで受け取ってモデルや構造体に変換する、といった手法が一般的である。これまでは、JSONSerializationやライブラリを用いてパースし、プロパティにセットする、ということをしていたと思う。Swift4からは、Codableを用いることで、シンプルにコレを実現することが可能となったのだ!

Codable

以下のようなJSONをAPI通信のレスポンスで取得するとしよう。

{
    "name": "hoge",
    "sex": 0,
    "birthday": "19900530",
    "mail_address": "hoge@gmail.com"
}

コレを"User"構造体に変換する場合は以下のようになる。

User.swift
import Foundation

struct User: Codable {
    
    let name: String
    let sex: Int
    let birthday: String
    let mail_address: String
    
}

変換する処理は一撃だ!

let jsonString = さんぷるのじぇいそん
let user = try! JSONDecoder().decode(User.self, from: jsonString.data(using: .utf8)!)

以上、終了である。

ネストにも対応

ネストされたデータはどうだろうか。
以下のようなJSONのケースを考えてみる。

{
	"status_code": 200,
	"user_list": [
		{
    		"name": "hoge",
    		"sex": 0,
    		"birthday": "19900530",
    		"mail_address": "hoge@gmail.com"
		},
		{
    		"name": "fuga",
    		"sex": 1,
    		"birthday": "19850421",
    		"mail_address": "fuga@gmail.com"
		}
	]
}

コイツを以下のような構造体に変換する。

UserListResult.swift
import Foundation

struct UserListResult: Codable {
    
    let status_code: Int
    let user_list: [User]
    
}

お前は既に死んでいる

let jsonString = さんぷるのじぇいそん
let userListResult = try! JSONDecoder().decode(UserListResult.self, from: jsonString.data(using: .utf8)!)

ひでぶ!!

スネークケースはちょっと…。

サーバーサイドではスネークケース、クライアントサイドではキャメルケースを採用している場合など、JSONのキーと構造体のプロパティ名が意図しているものと異なることがある。でもご安心を、そんなあなたに"CodingKey"!!

UserListResult.swift
import Foundation

struct UserListResult: Codable {
    
    let statusCode: Int
    let userList: [User]
    
    private enum CodingKeys: String, CodingKey {
        case statsCode = "status_code"
        case userList = "user_list"
    }
    
}

コレでプロパティ名とフィールド名をマッピング定義させることができた。Coooooooool!!!!!!

終わりに

iOSアプリ開発には必ずつきまとうであろうAPI通信のレスポンス処理、Codableを導入すればきっとあなたは幸せになれるハズである。

89
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
83

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?