Xcode
iOS
Swift
swift4

【Swift4】JSONExportがCodableプロトコルに対応しました

JSONExportとは

JSONExportはJSONの記述からからClassやStructのコードを生成するMac用のアプリケーションです。
先日久しぶりにBuildしてみたらCodableプロトコルに対応していました!!
(下記スクショ参照)
Swiftだけでなく、Objective-C、Javaに対応しており、Codableプロトコル以外にも
ObjectMapperのMappableやRealm Objectにも対応しています。

下記のサンプルはシンプルなもので特に手書きでもいいかな、と思いますがレスポンス構造の中にはどんだけ複雑なんだと思うようなものもあります。そのような複雑なレスポンスを手書きで書くと必ずミスが発生しますし、何よりも時間がもったいないです。
JSONExportを使えばサーバサイドの設計者に事前にJSONでレスポンスを定義しておいてね、と一言お願いしておくだけで(聞いてくれるかどうかはともかく)一発でレスポンス構造を実装できます。

スクリーンショット 2017-12-13 12.07.37.png

入手

https://github.com/Ahmed-Ali/JSONExport

から入手できます。

注意点

JSONの記述が抜けていたり、型が不明な場合はAnyObjectでコードが作成されてしまうので食わせるJSONはなるべく明確なものが必要です。AnyObjectになってしまった部分は手動で修正が必要です。

サンプル

JSON
{ "name"   : "John Smith",
  "sku"    : "20223",
  "price"  : 23.95,
  "shipTo" : { "name" : "Jane Smith",
               "address" : "123 Maple Street",
               "city" : "Pretendville",
               "state" : "NY",
               "zip"   : "12345" },
  "billTo" : { "name" : "John Smith",
               "address" : "123 Maple Street",
               "city" : "Pretendville",
               "state" : "NY",
               "zip"   : "12345" }
}

をJSONExportに食わせると下記のファイルを2つ出力してくれました。

Swift
//
//  RootClass.swift
//  Model file generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport

import Foundation

struct RootClass : Codable {

    let billTo : BillTo?
    let name : String?
    let price : Float?
    let shipTo : BillTo?
    let sku : String?


}
Swift
//
//  BillTo.swift
//  Model file generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport

import Foundation

struct BillTo : Codable {

    let address : String?
    let city : String?
    let name : String?
    let state : String?
    let zip : String?


}