网络运行后获取单元数 [英] Getting Cell Count after network operation

查看:66
本文介绍了网络运行后获取单元数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从网络请求中获取collectionViewCell计数,但是该值始终为0(我将其初始化为count变量)我希望视图在从get请求中获得计数后加载单元格我在做什么错了我在 super.viewDidLoad()之后编写了这段代码.

I am trying to get the collectionViewCell count from the network request but the value turns out to be always 0 (to which I initialised the count variable) I want the view to load the cells after I get it's count from the get request.What is it I'm doing wrong I have written this code after super.viewDidLoad().

DispatchQueue.global(qos:.background).async {
    let token = "---------------------------"
    let url = URL(string: "https:----------home.json?token="+token)!
    let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
        guard let data = data else { return }
        // print(String(data: data, encoding: .utf8)!)
        let jsonWithObjectRoot = try? JSONSerialization.jsonObject(with: data, options: [])
        //  print(json!)
        if let dictionary = jsonWithObjectRoot as? [String: Any] {
            if let data = dictionary["data"] as? [String:Any]{
                if let posts =  data["posts"] as? [Any]{
                    count = posts.count
                    //print(count) //the value here is 2 
                    for object in posts{

                        if let contentString = object as? [String: Any] {
                            print(contentString["title"] as! String)
                            //   print(contentString["entered"]as! String)
                        }
                    }
                }
            }

        }
    }
    task.resume()
    /* end Request */
    DispatchQueue.main.async{

        self.collectionView.reloadData()
        self.collectionView.collectionViewLayout.invalidateLayout()
    }
}

推荐答案

经典 async 案例.您的网络通话是异步的,因此您的重新加载应该在网络通话完成后进行.

Classic async case. You network calls are async, so your reload should happen inside the completion of the network call.

DispatchQueue.global(qos:.background).async {
    let token = "---------------------------"
    let url = URL(string: "https:----------home.json?token="+token)!
    let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
        guard let data = data else { return }
        // print(String(data: data, encoding: .utf8)!)
        let jsonWithObjectRoot = try? JSONSerialization.jsonObject(with: data, options: [])
        //  print(json!)
        if let dictionary = jsonWithObjectRoot as? [String: Any] {
            if let data = dictionary["data"] as? [String:Any]{
                if let posts =  data["posts"] as? [Any]{
                    count = posts.count
                    //print(count) //the value here is 2 
                    DispatchQueue.main.async{
                        self.collectionView.reloadData()
                        self.collectionView.collectionViewLayout.invalidateLayout()
                    }
                    for object in posts {
                        if let contentString = object as? [String: Any] {
                            print(contentString["title"] as! String)
                            //   print(contentString["entered"]as! String)
                        }
                    }
                }
            }
        }
    }
    task.resume()
    /* end Request */

}

这篇关于网络运行后获取单元数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆