rxSwift

    [rxSwift] TimeBased Operator 의 종류

    [rxSwift] TimeBased Operator 의 종류

    TimeBased Operator 의 종류 replay 구독자가 과거의 요소들을 자신이 구독하기 전에 나왔던 이벤트들을 버퍼의 갯수만큼 최신 순서대로 받게 함. replay관련 연산자를 사용할 땐 꼭 connect()로 연결해주어야 함. replay(bufferSize)에 1을 작성했다면 구독 전 가장 최신으로 배출된 item 1개를 받음. let hi = PublishSubject() let parrot = hi.replay(1) parrot.connect() hi.onNext("hi") hi.onNext("hello") parrot .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) hi.onNext("good") // hello // good ..

    [rxSwift] Combining Operator 의 종류

    [rxSwift] Combining Operator 의 종류

    Combining Operator 의 종류 startWith Observable 시퀀스 앞에 새로운 초기값을 추가함. var disposeBag = DisposeBag() let classRoom = Observable.of("student1","student2","student3") classRoom .starWith("teacher") .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) // teacher // student1 // student2 // student3 concat 같은 데이터 타입의 요소를 갖는 두개의 Observable들을 묶을 때 사용함. var disposeBag = DisposeBag() let first = Observ..

    [rxSwift] Transforming Operator 의 종류

    [rxSwift] Transforming Operator 의 종류

    Transforming Operator 의 종류 toArray Observable의 독립적 요소들을 array로 만드는 연산자. (Singe 형태로 변환됨) 옵저버블이 방출하는 모든 이벤트를 completed 시점에 배열로 방출함. let disposeBag = DisposeBag() Observable.of("A", "B", "C") .toArray() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) // [A, B, C] // completed let disposeBag = DisposeBag() let subject = PublishSubject() subject .toArray() .subscribe{ print($0) } .dispose..

    [rxSwift] Filtering Operator 의 종류

    [rxSwift] Filtering Operator 의 종류

    Filtering Operator 의 종류 ignoreElements next 이벤트를 무시함 completed, error 같은 정지이벤트는 허용함. let publishSubject = PublishSubject() let disposeBag = DisposeBag() publishSubject .ignoreElements() // 모든 이벤트 무시 .subscribe({ print($0) }) .disposed(by: disposeBag) publishSubject.onNext("A") publishSubject.onNext("B") publishSubject.onNext("C") publishSubject.onCompleted() // A, B, C 는 출력되지 않고 무시됨 // onComplet..

    [rxSwift] Subject 를 wrapping한 Relay 사용법

    [rxSwift] Subject 를 wrapping한 Relay 사용법

    Relay rxSwift와 달리 Rxcocoa를 import 해야 함. Subject의 Wrapping 버전으로 Subject의 특성을 가진 채 변형됨. .onNext가 아니라 .accept으로 사용함. (accept안에 onNext가 구현되어있음) .error 와 .complete 에 대해서 방출 하지 않는다. 오로지 .accept 로 받기만 한다. error 와 complete 가 없기 때문에 해당 조건이 발생할 수 없으므로 에러가 나도 무시됨. 즉, 계속해서 살아있는 스트림임. UI Event 와 바인딩 하여 사용하기에 적합함. Dispose되기 전까지 살아있음. Publish Relay와 Behavior Relay가 있음. PublishRelay PublishRelay는 PublishSubject..

    [rxSwift] Subject 에 대한 이해와 종류

    [rxSwift] Subject 에 대한 이해와 종류

    Subject 실시간으로 Observable에 새로운 값을 수동으로 추가하고, subscriber에 방출하도록 하는 것. Hot Observable임. Observable이자 Observer의 성격을 지니고 있음. Observable의 성격으로 onNext의 형태로 수동으로 값을 추가할 수 있고 Observer의 성격으로 subscribe를 통해 방출함. Subject 의 종류 PublishSubject 빈 상태로 시작하여, subscribe 이후의 이벤트만을 subscriber를 통해 방출함. PublishSubject는 .completed, .error 이벤트가 발생할때까지, 즉 종료될때까지 subscribe한 이후부터 이벤트를 방출. PublishSubject 예시 let subject = Publ..

    [rxSwift] Dispose 는 왜 하는 걸까?

    [rxSwift] Dispose 는 왜 하는 걸까?

    dispose 구독(Subscribe)을 처리, 메모리 누수를 막기 위함. 모든 subscribe의 return 에는 Disposable를 방출함. 사용하지 않는 Observable을 메모리에서 해제하기 위함. Disposable 프로토콜 안에는 disposed func으로 사용하지 않는 Observable을 DisposeBag에 넣어 관리 할 수 있음. disposeBag 구독에 대해서 일일히 관리하는 것은 효율적이지 못하기 때문에, RxSwift에서 제공하는 disposedBag 타입을 이용 disposeBag에는 disposables를 가지고 있음, disposable은 dispose bag이 할당 해제 하려고 할 때마다 dispose()를 호출 Observable.of(1, 2, 3) .subsc..

    [rxSwift] Observable create 하는 법

    [rxSwift] Observable create 하는 법

    create Obseravble을 커스터마이징 하게 만드는 방법임. create는 escaping 클로저로, escaping에서는 AnyObserver를 취한 뒤 Disposable을 리턴한다. 여기서 AnyObserver란 generic 타입으로 Observable sequence에 값을 쉽게 추가할 수 있다. var disposeBag = DisposeBag() Observable.create { observer -> Disposable in observer.onNext(1) observer.on(.next(6)) observer.onCompleted() onberver.onNext(9) return Disposables.create() } .subscribe { print($0) } .dispose..

    [rxSwift] Observable subscribe 하는 법

    [rxSwift] Observable subscribe 하는 법

    observable의 기본적인 구독 방법 // 오로지 1(Int 타입)만을 방출 let observable = Observable.just(1) //observable 구독 observable.subscribe( onNext: { data in print(data) // 1 }, onError: { error in print(error) // error 시 error코드 방출 후 종료 }, onCompleted: { print("completed") // 성공적으로 완료되면 무엇도 방출하지 않고 종료 }, onDisposed: { print("dispose done") // 종료 후 disposed } ) //위 코드와 같은 맥락의 코드 let observable = Observable.just(1) v..

    [rxSwift] 기본적인 Observable 의 종류

    [rxSwift] 기본적인 Observable 의 종류

    just 오직 하나의 요소를 포함하는 Observable 시퀀스를 생성 Observable.just(1) // 1 // completed of 타입 추론을 통한 Observable 생성 Observable.of(1, 2, 3, 4, 5) // 1 // 2 // 3 // 4 // 5 // completed Observable.of([1, 2, 3, 4, 5]) // [1, 2, 3, 4, 5] // completed from 오직 array 형태의 element만 받음 Observable.from([1, 2, 3, 4, 5]) // 1 // 2 // 3 // 4 // 5 // completed empty 아무런 element를 방출하지 않음, completed 이벤트만 방출 Observable.empty(..