IOS swift如何使用返回的Json数据填充我的TableView

时间:2016-10-06 17:47:41

标签: ios swift uitableview swift3

我刚开始使用Swift并且能够做一些基本的事情。现在我正在尝试用我成功检索的Json Data填充我的UITableView。现在我有这个看起来像这个简单的表

enter image description here

这是我能用这段代码创建的基本TableView

  @IBOutlet var StreamsTableView: UITableView!

    let groceries = ["Fish","lobster","Rice","Beans"]




     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
     {
       let mycell:UITableViewCell = StreamsTableView.dequeueReusableCell(withIdentifier: "prototype1", for: indexPath)

        mycell.textLabel?.text = groceries[indexPath.row]
        return mycell
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return groceries.count
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        StreamsTableView.dataSource = self
}

我现在有一个JsonRequest,我正在使用下面的代码成功完成

 override func viewDidLoad() {
        super.viewDidLoad()
        StreamsTableView.dataSource = self

        // Do any additional setup after loading the view.

        var names = [String]()
        let urlString = "http://localhost:8000/streams"

        let url = URL(string: urlString)
        URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
            if error != nil {
                print(error)
            } else {
                do {

                    let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
                    if let Streams = parsedData["Streams"] as! [AnyObject]? {

                    for Stream in Streams {
                        if let post = Stream["post"] as? String {
                            names.append(post)
                        }
                        }
                    }

                } catch let error as NSError {
                    print(error)
                }
        print(names)
            }

        }).resume()

    }

我最喜欢做的是放

的值
let post = Stream["post"] as? String 

在TableView内部而不是Groceries数组。正如我之前所说的那样,值是从Json回来的,我只是没有找到任何方法可以将这个值放在TableView中,任何帮助都会很棒。我使用的是swift 3.0。

3 个答案:

答案 0 :(得分:1)

添加重新加载数据代码

DispatchQueue.main.async {
    StreamsTableView.reloadData()
}

在你的for循环之后

for Stream in Streams { ... 

答案 1 :(得分:1)

if let Streams = parsedData["Streams"] as! [AnyObject]? {

                for Stream in Streams {
                    if let post = Stream["post"] as? String {
                        names.append(post)
                    }
                }
            }

            StreamsTableView.reloadData()

答案 2 :(得分:-1)

完成循环后

StreamsTableView.reloadData()

更新

mycell.textLabel?.text = groceries [indexPath.row]

mycell.textLabel?.text = names [indexPath.row]