반응형 전체 글94 [나는 바보다 2] 이상한게 있으면, 관련 클래스를 다 찾아보자 0.들어가기 앞서 나는 바보다 시리즈는 제가 개발과정중 너무나도 당연하면서도 어처구니 없는 실수를 했던것을 기록하여 스스로 반성하고자 만든 시리즈입니다. 1. 나는 바보다. 클린아키텍처 + MVVM 과 RxSwift를 적용해서 프로젝트 리팩토링중, 서비스 -> 레포지 -> 유스케이스 -> 뷰모델 까지는 데이터가 다 잘 전달 되는데.. 뷰컨에서 구독을 해도 바인딩을 해도 정보가 나타나지 않는것이었다... 2시간동안 잡고 있었는데.. 하... 2. 다시는 바보가 되지말자. 범인은 베이스 뷰컨트럴로에 viewDidLoad에 binding함수를 넣지 않은 것 이었다. class BaseViewController: UIViewController { var disposebag = DisposeBag() func l.. 2023. 11. 16. [RxSwift] RxCocoa (binding, Traits, Driver..등) RxCocoa RxCocoa란 기존 Cocoa Framework에 Rx기능을 합친 RxSwift기반의 라이브러리 RxSwift와 별도로 추가해주어야 사용할 수 있다 RxCocoa는 단방향성을 갖고 있다 Producer는 값을 생성하고, Consumer는 값을 처리 한다. ObserverType, ObservableType observableType : 값을 관찰할수 있습니다. observerType : 값을 주입시킵니다. Binding 데이터 생산자와 소비자가 존재( 생산자 = Observer, 소비자 = UI Component) 생산자가 생성한 데이터를 소비자에게 전달하고 소비자가 데이터를 소비한다 Binder 소비자 역할 observerType Observable이 아니기 때문에 구독자 추가 X Er.. 2023. 11. 4. [RxSwift] Erro 처리 catch, retry 연산자 OnError 로 처리하면 되지 않낭? Error 이벤트는 Observable 을 종료시키게 된다. 그래서 종료시키지 않고 다음과 같이 이벤트를 발생키시고 completed 가 발생되도록 error handling 을 하고자 하는 것이당! RxSwift 에서는 보통 세가지 방법으로 Error Handling 을 할 수 있다. catch : 특정 값으로 Error 복구 retry : 재시도 하기 materialize / dematerialize : Sequence 를 제어해서 처리 Catch Catch연산자는 Next와 Completed 연산자는 그대로 방출한다. API 요청 코드에서 Catch가 많이 사용된다. Error이벤트가 전달되면 새로운 Observable을 전달한다. 네트워크 에러가 있을 경우,.. 2023. 10. 31. [RxSwift] Create Operators [2] repeatElement 동일한 요소를 반복적으로 방출하는 옵저버를 생성 while과 비슷, 고로 방출되는 요소의 갯수 꼭 제한해야함 -> 아니면 무한으로 쭈욱 방출 take연산을 이용해 갯수 제한 Observable.repeatElement(element) .take(7) .subscribe { print($0) } .disposed( by: disposebag) deferred 특정 조건에 따라 옵저버블을 생성할 수 있다. if문 사용가능 즉시 옵저버블을 생성하는 create와 달리 구독을 해줘야 옵저버블이 생기기 때문에, 당장은 필요하지 않지만 필요한 상황에 구독하여 생성할 수 있다 네트워크 API에서 결과를 받아와 just처럼 옵저버블을 바로 만들어 주는 경우도 있지만, deferred를 통해 구.. 2023. 10. 30. [RxSwift] Create Operators [1] just, of, from just : 하나의 항목을 방출하는 Observable을 생성 ObservableTypeProtocol에 타입메서드로 선언되어있다. 파라미터로 하나의 요소를 받고 Observable로 리턴 파라미터로 전달된 요소를 그대로 방출! let element = "jife" Observable.just(element) .subcribe { event in print(event) } .disposed( by: disposebag) //next(jife) //completed //출력값 Observable.just([1,2,3]) .subcribe { event in print(event) } .disposed( by: disposebag) //next([1,2,3]) //completed.. 2023. 10. 29. [RxSwift] Relay Relay Relay는 Subject와 유사한 특징을 갖고있으며, 내부에 Subject를 맵핑하고있다. Relay는 RxCocoa에서 제공하는 기능이다. Subject와 유사하게 이벤트를 받아 구독자에게 전달한다. 차이점은 Next 이벤트만 전달한다. completed와 error는 받지도, 전달하지도 않는다. 구독자가 dispose되기 전까지, 계속 이벤트를 처리한다. 그래서 주로UI이벤트에 많이 사용된다. Relay에게 전달할때는 accept 를 사용 PublishRelay 빈 생성자로 PublishSubject와 동일하게 생성한다. 아래처럼 동일하게 구독하고 이벤트를 전달하면 된다. let pr = PublishRelay() pr.subscribe { print("1: \($0)") } dispo.. 2023. 10. 29. 이전 1 ··· 5 6 7 8 9 10 11 ··· 16 다음 반응형