今回はシンプルな記述でJSONデータを取得できる優れもの、SwiftyJSONの使いかたを共有します
今回取得するJSONデータは以下のような構造になっています。
Storyboard
SwiftyJSONのインストール
pod 'SwiftyJSON', '~> 4.0'
ViewController.swift記述
import UIKit
import SwiftyJSON
class ViewController: UIViewController {
@IBOutlet private weak var tableView: UITableView!
// 祝日名と日付を格納する
private var holidayData: [(name: String, date: String)] = []
override func viewDidLoad() {
super.viewDidLoad()
getHolidayData()
}
private func getHolidayData() {
guard let url = URL(string: "https://holidays-jp.shogo82148.com/2022") else { return }
let task = URLSession.shared.dataTask(with: url) { (data, _, _) in // 今回はresponseとerrorは省略
guard let data = data else { return }
guard let json = try? JSON(data: data) else { return }
let dataCount = json["holidays"] // オブジェクト名
for number in 0..<dataCount.count {
let nameData = json["holidays"][number]["name"].stringValue // name(祝日名)
let dateData = json["holidays"][number]["date"].stringValue // date(日付)
self.holidayData.append((name: nameData, date: dateData)) // 配列に格納する
}
}
task.resume() // taskを実行
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
holidayData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = holidayData[indexPath.row].name
cell.detailTextLabel?.text = holidayData[indexPath.row].date
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return self.view.frame.height / 6 // 画面全体を6分割した大きさのセルにする
}
}
見ての通り、JSONデータを
let nameData = json["holidays"][number]["name"]
という感じで非常にシンプルなコードで記述することができます。
まとめ
コードの可読性を上げるという面においてもSwiftyJSONはとても心強いライブラリです、JSONデータを扱うアプリを作る際はぜひ活用しましょう!