Trouble
여러 지역의 날짜 정보를 같은 fetchWeatherInfo(woeid: ) 라는 메서드를 반복 실행하여 데이터를 가져오고 싶었다.
그리고 모든 지역의 날짜 정보를 모두 fetch 완료 하였을 때 tableView를 갱신해주고 싶었다.
Shooting
지역 정보가 들어있는 locations 배열을 순회하며
dispatchGroup 을 사용하여 날씨정보를 fetch 해오는 메서드를 group에 담는다.
group 안에 있는 메서드를 순차적으로 수행하며 모든 데이터를 fetch 해온 후 main queue에 알리고(notify)
로딩화면을 멈춘 후 tableView를 갱신해주었다.
func fetchData(locations: [Location]) {
let dispatchGroup = DispatchGroup()
locations.forEach {
dispatchGroup.enter()
self.apiService.fetchWeatherInfo(woeid: $0.woeid) { code, data in
self.weatherList.append([data[0], data[1]])
DispatchQueue.main.async {
dispatchGroup.leave()
}
}
}
dispatchGroup.notify(queue: .main) {
self.stopLoading() // 데이터를 가져오는 동안 UX 개선을 위해 보여주던 로딩화면을 멈추는 코드
self.homeView.tableView.scroll(to: .top, animated: true)
self.homeView.tableView.reloadData()
}
}
결과
반응형
'Trouble Shooting' 카테고리의 다른 글
collectionView 안 텍스트 길이에 따라 동적으로 cell 사이즈 조절하기 (0) | 2022.08.22 |
---|---|
[iOS] 디바이스 회전을 감지하는 notification (0) | 2022.08.16 |
최상단으로 스크롤 시에만 보이는 뷰 구현(아래로 스크롤 시 사라지는 뷰) (0) | 2022.04.29 |
TableViewCell 안의 버튼 액션이 작동하지 않음 (2) | 2022.02.11 |
CollectionView cell 커스텀 하기 (해 달라는 대로 다 해줬잖아...) - iOS (1) | 2021.11.24 |