[Swift4] HTTP通信 / WebAPIからデータを取得し利用する

Swift
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

背景

JSONを返してくるWebAPIのデータをSwiftでいい感じに利用したい

alamofire(REST用?)とSwiftyJSON(JSONまわり?)いう有名なライブラリはあるらしいのですが、
Swift4ではそれらを使わなくてもCodableという標準ライブラリで容易にできるということなので、試してみました。

実装例

1. 構造体を作る

下記のようなJSONを受け取ると仮定して、

{
    "id":1,
    "name":"\u673a\u306e\u4e0b"
}

送られてくるJSONに則した構造体を定義する。

struct JsonSample : Codable{
    var id : Int
    var name : String
}

2. WebAPIを叩く&JSONをコンバートする

※例はGET
POSTは下記あたりを参照?
https://qiita.com/yutailang0119/items/ab400cb7158295a9c171

let listUrl = "https://xxxxxxxxx.com/?aaa=bbb"

guard let url = URL(string: listUrl) else { return }

URLSession.shared.dataTask(with: url) { (data, response, error) in
    if error != nil {
        print(error!.localizedDescription)
    }

    guard let data = data else { return }

    let json = try? JSONDecoder().decode(JsonSample.self, from: data)
}.resume()

URLSessionを用いてサーバーからデータを取得。
取得したデータはJSONDecoderを用いて、1.で生成したクラスに変換する。

3. 受け取ったデータを使用する

    print(json.name)

普通に構造体にアクセスすれば使えます

おまけ 配列に変換する

{
    "id":1,
    "name":"\u673a\u306e\u4e0b"
},
{
    "id":2,
    "place":"\u7384\u95a2",
}

こんな感じでJSONたちがたくさん送られてくる場合は、
let json = try? JSONDecoder().decode(JsonSample.self, from: data)の部分を下記のように変更する

let json = try? JSONDecoder().decode([JsonSample].self, from: data)

作った構造名を[](配列の意)で囲むだけ。

使うときは、「構造体の配列を使用する」ときの使い方で…(まるなげ!)

かんたんー。

コメント