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

Posted

技术标签:

【中文标题】IOS swift如何使用返回的Json数据填充我的TableView【英文标题】:IOS swift how can I populate my TableView with Json data being returned 【发布时间】:2016-10-06 17:47:41 【问题描述】:

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

这是我可以使用此代码创建的基本 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。

【问题讨论】:

for Stream in Streams 循环之后调用StreamsTableView.reloadData @Mr.Bista 确保它在主队列中被调用。 【参考方案1】:

添加重载数据代码

DispatchQueue.main.async 
    StreamsTableView.reloadData()

就在你的 for 循环之后

for Stream in Streams  ... 

【讨论】:

非常感谢,非常完美【参考方案2】:
if let Streams = parsedData["Streams"] as! [AnyObject]? 

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

            StreamsTableView.reloadData()

【讨论】:

【参考方案3】:

循环完成后

StreamsTableView.reloadData()

更新:

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

mycell.textLabel?.text = 名称[indexPath.row]

【讨论】:

以上是关于IOS swift如何使用返回的Json数据填充我的TableView的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 使用 Swift 在每个表格视图单元格中获取 JSON 提要

如何使用来自 Alamofire 的 JSON 数据填充 tableview?

使用字典数据填充 UITableView (Swift)

如何在 Swift 3 中用 JSON 数据填充表格?

如何使用 Alamofire,Swift 4 为 UICollectionView 获取 JSON 数据

如何让 json 在 Swift 3 中填充 UITableView?