Help us understand the problem. What is going on with this article?

[swift] SwiftyJSONをつかって、JSONの値をUITableViewに表示

More than 5 years have passed since last update.

今日1日JSONの読み込みに手こずってしまった。
まだまだ、Swiftに慣れななぁ〜

こんなにかかってしまったのは、「楽しいプログラミング」に書かれているJSONの読み込みのコードが、あまりにも不安定で原因がわからない状態だった。
その後、SwiftyJSONを試してみたが、TableViewに表示するのがわからなかった。
しかし、こちらのサイトを見つけて参考になりました。
"[Swift]APIで取得したJSONをswiftyJSONでパースして、天気情報をUITableViewで表示。お天気アプリを作ってみる。"

ViewController.swift
import UIKit

class ViewController: UITableViewController {
    // セクションの数
    let sectionNum = 1
    // 1セクションあたりのセルの行数
    let cellNum = 5
    let urlString = "~" //適当なjsonファイルへのパス
    // セルの中身
    var cellItems = NSMutableArray()
    // ロード中かどうか
    var isInLoad = false
    // 選択されたセルの列番号
    var selectedRow: Int?

    // ビューのロード完了時に呼ばれる
    override func viewDidLoad() {
        super.viewDidLoad()
        // json取得->tableに突っ込む
        makeTableData()
    }

    // json取得->tableに突っ込む
    func makeTableData() {
        self.isInLoad = true
        var url = NSURL(string: self.urlString)!
        var task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
            // リソースの取得が終わると、ここに書いた処理が実行される
            var json = JSON(data: data)

            println(json["list"])
            // 各セルに情報を突っ込む
            //適当なJSONファイルが持っている値
            for var i = 0; i < self.cellNum; i++ {
                var hId = json["list"][i]["humanId"]  
                var aoutName = json["list"][i]["aouther"]
                var tId = json["list"][i]["titleId"]
                var titleName = json["list"][i]["title"]
                var info = "\(hId), \(aoutName), \(tId), \(titleName)"
                self.cellItems[i] = info
                println(hId)
            }
            // ロードが完了したので、falseに
            self.isInLoad = false
        })
        task.resume()

        while isInLoad {
            usleep(10)
        }
    }


    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.sectionNum
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //return titleName.count
        return self.cellNum
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("list", forIndexPath: indexPath) as UITableViewCell

        cell.textLabel?.text = self.cellItems[indexPath.row] as? String
        return cell
    }
    override func tableView(tableView: UITableView?, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        performSegueWithIdentifier("detail", sender: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

JSON自体にも慣れておらず、うーん、、、、
SwiftyJSON自体もよくわからなかった。今更で、当たり前のことなんだけど、JSONの各値をイニシャライズしないとうまく動かない。
いろいろと大変だ。

norizou4
WebデザイナーがC#とswiftからプログラミングを学んでいきます。
http://noriyasu-katano.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away