ローカルのJSONを読み込んでUITableViewで表示


iOSのプログラムをしてみました。

Xcode9のplaygroundでローカルのJSONファイルを読み込んでUITableViewで表示してみました。

以下のようなJSONファイルを使いました。

users.json
[
  {
 "id": 1,
 "name": "Alice",
  },
  {
 "id": 2,
 "name": "Bob",
  }
]

このファイルをplaygroundのResoucesフォルダに追加します。

JSONのデコードはCodableを使いました。

JSONの1エントリをdecodeするCodableの構造体を定義して、JSONDecoder().decode()の引数に、その構造体のArray [User].selfを指定します。
とりあえず、これだけでJSONがデコードできます。

以下XcodeのPlaygroundで動くプログラムです。

import UIKit
import PlaygroundSupport

struct User: Codable {
    var id: Int
    var name: String
}

class TableViewController : UITableViewController {

    var users: [User]?

    override func viewDidLoad() {
        super.viewDidLoad()
        loadJsonFile()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.users?.count ?? 0
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
        cell.textLabel?.text = "\(self.users?[indexPath.row].name ?? "null")"
        return cell
    }

    func loadJsonFile() {
        guard let path = Bundle.main.path(forResource: "users", ofType: "json") else { return }
        let url = URL(fileURLWithPath: path)
        do {
            let data = try Data(contentsOf: url)
            let users = try JSONDecoder().decode([User].self, from: data)
            self.users = users
        } catch  {
            print(error)
        }
    }
}

let tableViewController = TableViewController(style: .plain)
PlaygroundPage.current.liveView = tableViewController

実行するとこんな感じです。