从控制器外部在collectionView上快速reloadData

时间:2018-09-22 08:57:37

标签: ios swift

我有一个带有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()

    }

}

1 个答案:

答案 0 :(得分:2)

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

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

    ...


    self.products = data
    completion()

    ...    
}

并命名为

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