我有一个带有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()
}
}
答案 0 :(得分:2)
通常的方法是添加完成处理程序
static func fetchProducts(completion: () -> Void) {
...
self.products = data
completion()
...
}
并命名为
Brand.fetchProducts() {
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}