본문 바로가기
Swift 개발 이야기

API 를 여러개 호출해야할때 모든 API 가 호출되었음을 확인하려면?

by 방화동한량 2020. 2. 3.
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 에 순서는 다를 수 있겠습니다만,,

 

이렇게 간단하게 완료 시점을 체크해서 다음 페이지로 이동하시면 되겠습니다.