Моя задача - загрузить JSON через Alamofire, заполнить мой массив и чуть позже, чтобы показать его внутри func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
, но у меня есть проблема, потому что этот блок начинается до того, как мой массив был заполнен, поэтому я получаю сбой, что мой массив пустой.Зачем заполнять блок Handler не отвечает?
Я думал, что я могу решить эту проблему с completionHandler как:
func abcd(completion: (() -> Void)) {
let getMyProfileURL = "\(self.property.host)\(self.property.getMyProfile)"
Alamofire.request(.POST, getMyProfileURL, parameters: self.userParameters.profileParameteres, encoding: .JSON).responseJSON { response in
do {
let json = JSON(data: response.data!)
if json["user"].count > 0 {
self.profileDetails.append(ProfileDetailsModel(json: json["user"]))
}
}
}
}
позже, я называю его:
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
self.abcd {
print("SUCCESS")
print(self.profileDetails)
}
}
но не печатает мой completionHandler
код prints
. Зачем? В чем проблема и как я могу это исправить?
P.S Если вы можете предложить мне лучшее решение для моей задачи, было бы здорово!
инициализирует массив, когда вы получите ответ, а затем перезагрузить CollectionView. – sourav
вам нужно перезагрузить представление коллекции, как только вы закончите с асинхронным запросом данных –
, вы не вызывали блок завершения в функции 'abcd', поэтому он ничего не печатает. – TangZijian