완료 처리기 안에 2 개의 Alamofire 요청이있는 함수가 있습니다. 두 요청이 모두 서버에서 데이터 다운로드를 완료하면 collectionView를 다시로드하려고합니다. 함수에서 완료 핸들러가 있지만 두 번 호출되어 collectionView를 두 번 다시로드하고 한 번만 다시로드하는 것을 좋아합니다. 내가 그렇게 할 수있는 방법이 있니? 정말 고맙습니다!동일한 함수에서 2 개의 Alamofire 요청에 대해 하나의 완료 처리기를 갖는 방법
func getFeedVideos(completion: @escaping (_ completedDownloadVideo: Bool) ->()){
Alamofire.request(youTubeUrl, method: .get, parameters: ["part":"snippet","maxResults": "20","nextPageToken" : "pageToken", "playlistId": playListId, "key": googleAPIKey], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
guard let data = response.data else {return}
do {
let json = try JSONDecoder().decode(serverData.self, from: data)
self.dataFromAPI = json.items
Alamofire.request(youTubeChannelUrl, method: .get, parameters: ["part":"snippet", "key": googleAPIKey, "id": youTubeChannelId], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
guard let data = response.data else {return}
do {
let json = try JSONDecoder().decode(channelInfo.self, from: data)
self.channelData = json.items
completion(true)
} catch let jsonErr{
print(jsonErr)
}
}
} catch let jsonErr{
print(jsonErr)
}
}
}
난 당신이 completion(true)
를 호출하는 코드에보고하고 같이 여기
func getFeedVideos(completion: @escaping (_ completedDownloadVideo: Bool) ->()){
Alamofire.request(youTubeUrl, method: .get, parameters: ["part":"snippet","maxResults": "20","nextPageToken" : "pageToken", "playlistId": playListId, "key": googleAPIKey], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
guard let data = response.data else {return}
do {
let json = try JSONDecoder().decode(serverData.self, from: data)
self.dataFromAPI = json.items
completion(true)
} catch let jsonErr{
print(jsonErr)
}
}
Alamofire.request(youTubeChannelUrl, method: .get, parameters: ["part":"snippet", "key": googleAPIKey, "id": youTubeChannelId], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
guard let data = response.data else {return}
do {
let json = try JSONDecoder().decode(channelInfo.self, from: data)
self.channelData = json.items
completion(true)
} catch let jsonErr{
print(jsonErr)
}
}
}
하고 아래와 같이 나는 당신의 getFeedVideos
방법 업데이트의 viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
getFeedVideos { (complete) in
if complete{
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
}
}
}
작동합니다! 두 번째 요청 호출 내에서 참조를 위해 자 체를 넣기 만하면됩니다. 고마워요! –