-
[뉴스어플 정리] 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를 써보기 위해서 더 공부해야겠다.
'iOS > 뉴스어플(RxSwift)' 카테고리의 다른 글
[뉴스어플 정리] 6. 테이블뷰 셀 터치하기 (0) 2021.05.25 [뉴스어플 정리] 5. 뷰모델을 테이블뷰에 붙이기 (0) 2021.05.24 [뉴스어플 정리] 4. 뉴스데이터를 뷰모델로 가공하기 (0) 2021.05.24 [뉴스어플 정리] 3. 뷰모델 만들기 (0) 2021.05.24 [뉴스어플 정리] 2. 뉴스데이터 가져오기 (0) 2021.05.24