Asyn c Запрос Alamofire должен быть вне обработчика cellForItemAt
. Поскольку cellForItemAt
вызывается каждый раз, когда ячейка появляется на экране, это означает, что она будет пытаться получить одни и те же данные для одной и той же ячейки несколько раз во время прокрутки, что не предназначено. Так что viewDidLoad
- хорошее место для начала выборки, после завершения асинхронного вызова c не забудьте перезагрузить коллекцию.
var user_image_url: String?
override func viewDidLoad(_ animated: Bool) {
someRequest(username: self.usernameUrl) { (userInfo, error) in
guard let userInfo = userInfo else {
// present error
return
}
print("Running")
user_image_url = userInfo.items.map{($0.avatarURL)}
self.collectionViewUsers.reloadData()
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! UsersCollectionViewCell
if let user_image_url = user_image_url {
//user_image_url is avaliable
}
return cell
}