ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [뉴스어플 정리] 7. 다른뉴스로 교체하기
    iOS/뉴스어플(RxSwift) 2021. 5. 25. 13:05
    func subscribeRightBarButton() {
            barButton.rx.tap
                .observe(on: MainScheduler.instance)
                .bind() { [weak self] in
                    self?.viewModel.fetchViewModel(source: APICaller.Source.kr)
                    self?.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: false)
                }.disposed(by: disposeBag)
        }

    네비게이션 아이템에 바버튼을 하나 추가했다.

    그 바버튼을 누르면 동작하는 코드도 RxSwift를 이용해서 작성할 수 있다.

     

    간단하게 barButton.rx.tap을 bind하고 동작할 클로저를 작성하면 된다.

    여기서는 뷰모델을 만드는 함수를 넣었다. 대신 source로 한국 뉴스 API를 인자로 했다.

     

    이 함수는 뉴스데이터 -> Observable<[Article]> -> Observable<[ViewModel]> -> SubjectBehavior<[ViewModel]>의

    과정을 거치고 SubjectBehavior<[ViewModel]>은 onNext로 [ViewModel]을 전달한다.

    SubjectBehavior<[ViewModel]>은 viewModel의 articleObservable이다.

     

    바버튼을 누르면 한국뉴스 데이터를 뷰모델로 바꿔서 onNext로 전달하는것이다.

    이미 테이블뷰에 뷰모델의 articleObservable을 bind해놨으므로 버튼을 누르면 알아서 테이블뷰가 한국뉴스로 바뀐다.


    만약 RxSwift를 이용하지 않았다면 뉴스데이터를 가져오는 과정에서 completion을 만들었을거고 더 복잡했을것이다.

     

    이 뉴스앱을 만들면서 테이블뷰의 delegate, datasource를 사용하지 않았다.

    이 부분이 정말 놀라웠다.

     

    버튼이나 cell을 터치하는 부분도 rx로 다룰 수 있다.

    다른 UIKit의 기능들도 RxCocoa를 이용해서 구현하는 공부를 더 해야겠다.

     

    RxSwift를 사용하면 비동기 작업을 더 깔끔하게 해준다고하는데 직접 사용해보니 코드가 더 간결해진거 같다.

     

    처음 배울때는 코드가 더 깔끔해진다고 하길래 이게 대체 뭐가 깔끔한거냐고 이해를 못했지만

    계속 찾아보고 플레이그라운드에서 만들면서 놀아보고 어플까지 만들어보니

    그냥 만들때보다 깔끔해졌다고 느껴진다.

     

    반응형으로 만들어본 부분은 이 글에서 나오는 뉴스를 교체하는 부분이다.

    이전에 테이블뷰에 걸어놓은 Subject에 onNext로 값만 전달하면 알아서 반응해서 테이블뷰를 바꿔준다.

    이 부분이 정말 놀랍고 써먹을곳이 많을거라고 생각한다. 왜 RxSwift를 많이 찾는지 알거 같다.

     

    앞으로 다른거 만들때도 RxSwift를 써보기 위해서 더 공부해야겠다.

     

Designed by Tistory.