1
7

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.

SwiftでAPIを用いる流れ(ライブラリを使わないversion)

Last updated at Posted at 2019-08-11

iOSアプリにおいて、 AlamofireやSwiftyJSONなどのライブラリを用いずにAPIを利用する流れについてまとめてみました。 

##使用するもの

##やること
TableViewにAPIから取得したデータを一覧で表示する。
サーバーにHTTPリクエストを送り、返ってきたHTTPリクエストを受け取ってTableViewに表示する。

##手順
###①Codableを使ってJSONを受け取る構造体(モデル)を作る。

QiitaStruct.swift
struct QiitaStruct: Codable {
    var title: String
    var user: User
    struct User: Codable {
        var name: String
    }
}

###②HTTPリクエストの生成
####URLオブジェクトの生成

QiitaViewController.swift
let url = "https://qiita.com/api/v2/items"

####URLRequestオブジェクトの生成

QiitaViewController.swift
let request = URLRequest(url: url)

###③HTTPリクエストを投げ、返ってきたレスポンスを受け取って配列に格納する。
####URLSessionクラスのインスタンスからリクエストを送り、その後のデータを受け取った後の処理について記述する。

QiitaViewController.swift
let qiitaArray:[QiitaStruct] = []
let task = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
    guard let jsonData = data else { return }
  
    do {
        let articles = try JSONDecoder().decode([QiitaStruct].self, from: jsonData)
        qiitaArray.append(articles)   
    } catch {
        print(error.localizedDescription)
    }
}
task.resume()

###④格納した配列の値をTableViewに表示する。

QiitaViewController.swift
extension QiitaViewController: UITableViewDataSource {
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "Cell")
        let article = articles[indexPath.row]
        cell.textLabel?.text = article.title
        cell.detailTextLabel?.text = article.user.name
        return cell
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return articles.count
    }
    
}

以上の手順により、以下のようにTableViewにデータを表示することができました。

Simulator Screen Shot - iPhone Xʀ - 2019-08-11 at 20.40.25.png

作成したQiitaAPIのサンプルプロジェクトは以下のGithubページからクローンできます。
サンプルプロジェクトでは、MVVM設計でコンポーネントを作って、少しだけ実装を抽象化しています。
https://github.com/YukiNagai1016/QiitaAPI

1
7
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
1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?