LoginSignup
13
15

More than 3 years have passed since last update.

SwiftでWebAPIにGETリクエストしてみた。

Last updated at Posted at 2019-05-28

SwiftでWebAPIにGETリクエストしてみた。

はじめに

今Swiftの勉強中で、いろいろやってみたことをまとめます。

環境

  • macOS Mojave
  • Xcode ver10.2.1
  • Swift 5.0.1

JSONをパースしよう

APIを叩いたらJSONで返ってくる予定なので、まずJSONパースをやってみます。
仮にこんなJSONがあるとします。

user.json
[
    {
        "id":"A0001",
        "name":"モンキー D ルフィ",
        "remarks":"ゴムゴムの実の能力者"
    },
    {
        "id":"A0002",
        "name":"うずまき ナルト",
        "remarks":"元落ちこぼれ忍者"
    }
]

このJSONを受けるための構造体を作ります。

struct.swift
// Codableの継承を忘れないこと!
struct User: Codable {
    let id: String
    let name: String
    let remarks: String
}

Swift4.0から標準ライブラリでJSONDecoderなるものがあるらしい。
以下のようにすると、構造体にマッピングできる。

struct.swift
// JSONDecoderはData型しか受け付けないので、文字列型から変換する。
let jsonData = jsonStr.data(using: .utf8)

// さっき定義した構造体(User)の形にデコードしてくれる!
let users = try! JSONDecoder().decode(User.self, from: jsonData!)

// 結果をコンソールに表示
for user in users {
  print("id:\(user.id) name:\(user.name) remarks:\(user.remarks)")
}
/*  結果 
 *  id:A0001 name:モンキー D ルフィ remarks:ゴムゴムの実の能力者
 *  id:A0002 name:うずまき ナルト remarks:元落ちこぼれ忍者
*/

Codableを継承していないと、JSONDecoderは使えないので注意。
ドキュメント

APIにGETリクエストしよう

いよいよAPIにリクエストしてみます。
WebAPIの用意は、GoogleAppsScriptで作りました。
GoogleSpreadSheetをDBみたいにするAPIを作成しました。

SwiftでGETリクエストしてみる

いろいろ格闘してこんな感じになりました。

get.swift
private func get(){
    let urlString = "https:〜〜〜〜〜〜〜〜〜〜〜〜〜"

    guard let url = URLComponents(string: urlString) else { return }

    // HTTPメソッドを実行
    let task = URLSession.shared.dataTask(with: url.url!) {(data, response, error) in
        if (error != nil) {
            print(error!.localizedDescription)
        }
        guard let _data = data else { return }

        // JSONデコード
        let users = try! JSONDecoder().decode([User].self, from: _data)
        for row in users {
            print("id:\(row.id) name:\(row.name) remarks:\(row.remarks)")
        }
    }
    task.resume()
}

結果

ストーリーボードで実行してみたら、ちゃんと出力してくれた!
スクリーンショット 2019-05-28 20.21.10.png

あとがき

実はPOSTリクエストも作成済みなので、いずれPOSTも記事を書きます。

13
15
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
13
15