iOSアプリにおいて、 AlamofireやSwiftyJSONなどのライブラリを用いずにAPIを利用する流れについてまとめてみました。
##使用するもの
- Codable(https://qiita.com/UJIPOID/items/2c436a80f1167f7bcac0)
- Qiita API(https://qiita.com/api/v2/items)
- コアライブラリFondation(URL、URLRequest、URLResponse、URLSessionクラスを用いる)
##やること
TableViewにAPIから取得したデータを一覧で表示する。
サーバーにHTTPリクエストを送り、返ってきたHTTPリクエストを受け取ってTableViewに表示する。
##手順
###①Codableを使ってJSONを受け取る構造体(モデル)を作る。
struct QiitaStruct: Codable {
var title: String
var user: User
struct User: Codable {
var name: String
}
}
###②HTTPリクエストの生成
####URLオブジェクトの生成
let url = "https://qiita.com/api/v2/items"
####URLRequestオブジェクトの生成
let request = URLRequest(url: url)
###③HTTPリクエストを投げ、返ってきたレスポンスを受け取って配列に格納する。
####URLSessionクラスのインスタンスからリクエストを送り、その後のデータを受け取った後の処理について記述する。
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に表示する。
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にデータを表示することができました。
作成したQiitaAPIのサンプルプロジェクトは以下のGithubページからクローンできます。
サンプルプロジェクトでは、MVVM設計でコンポーネントを作って、少しだけ実装を抽象化しています。
https://github.com/YukiNagai1016/QiitaAPI