728x90
서버 개발자 분이 친절하게 한가지 API 에 모든 데이터를 다 파싱해서 넘겨주시는 경우도 있지만, 사실 그렇지 않은 경우가 많죠? 그럴때는 간단하게 Dispatch Group 을 사용하면 됩니다.
검색 결과를 받아오는 API 인데, 이게 호출하는 부분이 두개인 경우가 있다면 어떻게 처리해야 할까요? 바로 예시로 들어가겠습니다.
let queryString = "아이유"
let networkQueue = DispatchQueue(label: "network", qos: .background, attributes: .concurrent)
let networkGroup = DispatchGroup()
networkGroup.enter()
API.shared.get(.blog, comp: queryString) { (result) in
networkQueue.async(group: networkGroup) {
print("BLOG")
networkGroup.leave()
}
}
networkGroup.enter()
API.shared.get(.news, comp: queryString) { (result) in
networkQueue.async(group: networkGroup) {
print("NEWS")
networkGroup.leave()
}
}
networkGroup.notify(queue: networkQueue) {
print("END")
// 이동 로직
}
네트워크 관련 큐를 하나 생성해주고, 종료시점을 체크할 수 있게 Dispatch Group 을 생성해줍니다.
그리고 API 호출되는 부분에서 해당 그룹에 진입을 한다고 enter() 로 처리해주고, API response 가 왔을 때 leave() 로 명시해줍시다.
이제 networkGroup 에서 networkQueue 가 완료되었다는 알림을 체크해주면..?
이렇게 각각의 API 가 호출이 완료된 후에야 END 가 호출되게 됩니다.
API 가 호출되는 시점이 다르기 때문에 NEWS, BLOG 에 순서는 다를 수 있겠습니다만,,
이렇게 간단하게 완료 시점을 체크해서 다음 페이지로 이동하시면 되겠습니다.
'Swift 개발 이야기' 카테고리의 다른 글
Swift 로 알아보는 객체지향 프로그래밍 - 2 (0) | 2020.02.19 |
---|---|
Swift 로 알아보는 객체지향 프로그래밍 - 1 (0) | 2020.02.07 |
SwiftUI를 사용하지 않고 Preview 사용하기 (0) | 2020.01.03 |
SnapKit 을 이용하여 Dynamic Height ScollView 를 만드는 법 (1) | 2019.10.10 |
RxSwift로 여러가지 Custom TableView Cell 을 설정하기 (0) | 2019.05.28 |