[英]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.