繁体   English   中英

从控制器外部快速重新加载collectionView上的数据

[英]Swift reloadData on collectionView from outside of controller

我有一个带有 collectionView 的控制器,可以从 API 中提取项目数据。 数据存储在 struct->static 变量中。 我需要从应用程序的多个区域访问这些数据。

当API数据进来时如何重新加载tableView数据?

控制器

class CollectionsViewController: UIViewController {

}


extension CollectionsViewController: UICollectionViewDataSource{
   func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return Brand.products.count
    }
}

API数据

struct Brand{
    static var products:[Product] = []

    static func fetchProducts(){


        let url = URL(string: "www.someAPIexample.com")
        URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
            guard let data = data, error == nil else { return }

            do{
               // update data (cut this part for readability)
               self.products = data
               // reload the controller.collectionView that uses this
               (how do I get this controller from here).collectionView.reloadData()

            }catch{
                print(error)
            }


        }).resume()

    }

}

通常的方法是添加一个完成处理程序

static func fetchProducts(completion: () -> Void) {

    ...


    self.products = data
    completion()

    ...    
}

并称之为

Brand.fetchProducts() {
   DispatchQueue.main.async {
        self.collectionView.reloadData()
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM