【Xcode/Swift】SwiftyJSONって便利

今回はシンプルな記述で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データを扱うアプリを作る際はぜひ活用しましょう!