minjae-L / ShowWeather

날씨 알려주는 앱
0 stars 0 forks source link

2024-08-12 #20

Open minjae-L opened 2 months ago

minjae-L commented 2 months ago

Rx + URLSession 을 사용하여 데이터 통신 리턴 형식이 Single이다. 공공 데이터 포털에서 한번에 날씨의 모든 정보를 불러오려면 두번 걸쳐서 데이터를 받아와야한다.

Single로 반환하되 매개변수를 Page번호로 1번 2번 모두 받게끔 반복문으로 진행 Single이 비록 Success 혹은 Fail 한번만 이벤트 방출후 자동 종료되지만 반복문으로 진행하기에 뭔가.. 괜찮은 방식이 아닌것 같다.

minjae-L commented 2 months ago

두개의 Single을 zip연산자를 사용하여 결합한 후 이벤트 방출하는 방식

let single1 = APIManager.shared.fetchData(nx: location.x, ny: location.y, page: 1)
let single2 = APIManager.shared.fetchData(nx: location.x, ny: location.y, page: 2)

let zippedSingle = Single.zip(single1, single2)
          zippedSingle
                .subscribe {[weak self] event in
                    switch event {
                    case .success((let result1, let result2)):
                        switch result1 {
                        case .success(let data):
                            self?.convertDataFromCategory(response: data)
                        case .failure(let error):
                            print("page 1 error:\(error)")
                        }
                        switch result2 {
                        case .success(let data):
                            self?.convertDataFromCategory(response: data)
                        case .failure(let error):
                            print("page 2 error:\(error)")
                        }
                    case .failure(let error):
                        print("zipped single fail\(error)")
                    }
                }