Я супер новичок в Свифте (учусь пару недель) и извините за мой английский.я не знаю, как избежать проверки метода "cellForItemAt indexPath".Я пытался играть с refreshingControl, но он не работает.Я получил ошибку в строке «let arry = arrayOfData [indexPath.row] // <- здесь есть ошибка: фатальная ошибка: индекс вне диапазона».Если я прокомментирую эту строку, все работает нормально (и refreshControll).Мой arrayOfData пуст, когда collectionView пытается загрузить, если продолжить (когда я отлаживаю), в конце концов я получу мои данные из arrayOfData (его данные из JSON).Но компилятор не будет проверять этот метод снова (если я попробую проверить isRefresh true для false). </p>
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
private var isRefreshing = true
var arrayOfData = [GettingMoney]()
override func viewDidLoad() {
super.viewDidLoad()
let refreshControl = UIRefreshControl()
refreshControl.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
collectionView.refreshControl = refreshControl
collectionView.refreshControl?.beginRefreshing()
fetchData()
collectionView.dataSource = self
collectionView.delegate = self
}
func fetchData () {
let url = "SOMEAPI"
guard let urlString = URL(string: url) else { return }
URLSession.shared.dataTask(with: urlString) { (data, _, _) in
guard let data = data else { return }
do {
let getData = try JSONDecoder().decode(GettingMoney.self, from: data)
print("getSomeData")
DispatchQueue.main.async {
self.arrayOfData = [getData]
self.collectionView?.reloadData()
self.collectionView.refreshControl?.endRefreshing()
print("reload Data")
}
} catch {
print("Its a error")
}
}.resume()
}
}
extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCellId", for: indexPath) as? CollectionViewCell {
let arry = arrayOfData[indexPath.row] // <-- here is got error: Fatal error: Index out of range
print("is Ok")
cell.currectCurrency.text = "\(arry.USD))"
print(arrayOfData)
return cell
}
return UICollectionViewCell()
}
}