rxSwift
![[rxSwift] TimeBased Operator 의 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F0XN6b%2FbtrPJWU7MMH%2FAAAAAAAAAAAAAAAAAAAAAOdcsN1_WkPQhy7dWUkktEHwTdVqLH9ElzAFtJpv3B0W%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DSuHOWFjudpHqniHPM56M4bzJ1zs%253D)
[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 의 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcRddOn%2FbtrPmEHwshP%2FAAAAAAAAAAAAAAAAAAAAAAGf6VGr9rfYuRFP05TRgm0trQNeeqt6Pp9qpxwnG_X3%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DWnVl2nFWWnKyUPs4oH8sZKhb6Qc%253D)
[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 의 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcUVvcj%2FbtrPa9NRs11%2FAAAAAAAAAAAAAAAAAAAAALTO9wMy0UYgB62RGvItDLIWvkyxZH_9XAdvNoAWw74p%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DFXjvU2i3ABVZ%252BYhw1zsymma0loI%253D)
[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 의 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fefisso%2FbtrO6hdAQ8z%2FAAAAAAAAAAAAAAAAAAAAABVdU3fndWualedmKQKNRWChPhc6Aq8EFDenDPSX4Gl9%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DMmDO20q02TzVZj8Pnr3u%252BbL2kR0%253D)
[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 사용법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FmanKc%2FbtrO0H50XeB%2FAAAAAAAAAAAAAAAAAAAAAOUyH_ZFRYaNt9ykNo6_DH438Cpoy27OYfRU3AFosWr4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DqYK8CP5EeFa5705ez1IoP%252Bss1Kk%253D)
[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 에 대한 이해와 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcD61qm%2FbtrOZ83s6vg%2FAAAAAAAAAAAAAAAAAAAAABugWvB0JMuU7BDqCMrr096F87jieDvI-yDfrW8tdtsU%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DflUWE41nexJHoD1A2aNdYhRZnG0%253D)
[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 는 왜 하는 걸까?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FtTSXP%2FbtrOTu0m0Db%2FAAAAAAAAAAAAAAAAAAAAAPYiEbZn6GtDovjI-k2iXrzArZ6Wm67K6ePidkHUdZ8t%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DluyOPHbQD5CMlWXJuZcR7xye%252B%252FQ%253D)
[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 하는 법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbmGZfh%2FbtrOTjRoibE%2FAAAAAAAAAAAAAAAAAAAAAIt4r33K-84AP7ahnIeC1m_5qSjE0K4pwdtXmwyH3T-c%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dc87KXg0mOKkZAw8e1%252FWPg1FMQxg%253D)
[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 하는 법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FyppNE%2FbtrODgafQ1l%2FAAAAAAAAAAAAAAAAAAAAAJknFXXIV88UhPuq8_ceT7IB_HB-u99nyP1GLarlTt-D%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DVMRH4vR6k2Azjy6VpF85sez4ejU%253D)
[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 의 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fqu8s8%2FbtrOTtMLGhG%2FAAAAAAAAAAAAAAAAAAAAAIy5iANbyIoXK6t-4f5FM8LHz-FyOGgZqMXk1n9fzFkY%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dn10BJbkZ4yCCtvwpS8Wr9qhHnA0%253D)
[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(..