일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Operater
- Bug
- @State
- IOS
- dismiss
- URL(string:)
- SwiftUI
- RxCocoa
- graphql
- swift6
- operator
- Creating Operators
- @Binding
- SWIFT
- Operators
- vim
- nestjs
- @Environment
- subject
- @EnvironmentObject
- init?
- NavigationLink
- Xcode
- nonisolated
- RFC1738/1808
- ios14
- init
- typeorm
- NullObject
- RxSwift
- Today
- Total
목록Development/RxSwift (36)
Tunko Development Diary
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/whtXQ/btrDDsZcZ3E/6MEKYY63EQjmXKkPKZdFQk/img.png)
repeatElement let disposeBag = DisposeBag() let element = "👍" Observable.repeatElement(element) .take(10) .subscribe { print($0) } .disposed(by: disposeBag) 출력 next(👍) next(👍) next(👍) next(👍) next(👍) next(👍) next(👍) next(👍) next(👍) next(👍) completed 동일한 요소를 반복적으로 방출하는 연산자입니다. 무한정 반복합니다. 따라서 방출되는 횟수를 정해주는게 중요합니다. take 연산자를 사용해서 10개의 요소만 방출되도록 해주었습니다. deferred let disposeBag = DisposeBag() var fla..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JNovL/btrDqdPmBwR/x3q0fc6P46hKjpptXzaB1k/img.png)
PublishRelay 는 PublishSubject를 wrapping BehaviorRelay 는 BehaviorRelay를 wrapping ReplayRelay 는 ReplaySubject를 wrapping 합니다. ReplayRelay는 RxSwift6 버전에서 추가 되었습니다. 여기서 wrapping은 감싸다 라는 사전적 의미입니다. 기존 사용되는 방법에서 추가하거나 기능을 제외시키거나 할대 사용되는 프로그래밍 방식입니다. Subject를 wrapping하면서 Relay가 된 기능의 대표적인 차이점은 Completed, Error 이벤트를 방출하지 않는다는 것입니다. 종료 되지 않기때문에 주로 UI이벤트를 처리할때 사용합니다. Relay는 UI이벤트를 처리할때 사용한다 했듯이 RxCocoa 라이브..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/J0nxv/btrDuw2mHhD/UkVrw5MPIVPFDnkTR8Yk7K/img.png)
AsyncSubject 는 이벤트가 전달되는 시점이 다릅니다. 구독한 시점에 이벤트가 전달되는것이 아닌 Complite 이벤트가 전달되면 가장 마지막 이벤트가 전달됩니다. let disposeBag = DisposeBag() enum MyError: Error { case error } let subject = AsyncSubject() subject .subscribe { print($0) } .disposed(by: disposeBag) subject.onNext(1) subject.onNext(2) subject.onNext(3) subject.onCompleted() //subject.onError(MyError.error) 출력 next(3) completed 만약 onCompleted가 아닌 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bb2PBF/btrDwQeMMTB/dzDjYX46iwDmSphJtyoUQK/img.png)
ReactiveX - Subject ReplaySubject는 create메서드를 통해 생성합니다. 생성시 이벤트의 버퍼의 크기를 지정합니다. 버퍼는 메모리에 할당하기 때문에 버퍼크기를 잘 고려해야 합니다. 낭비는 없도록 해줍니다. let disposeBag = DisposeBag() enum MyError: Error { case error } let replaySubject = ReplaySubject.create(bufferSize: 5) (1...10).forEach { replaySubject.onNext($0) } replaySubject.subscribe{ print("next Event : \\($0)")} .disposed(by: disposeBag) 출력 next Event : next..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Zc9fv/btrDxpVvwPx/6AcspDuwkjsxGh2FKP5rSK/img.png)
BehaviorSubject는 기능상으로 PublishSubject와 큰 차이가 없습니다. 하지만 생성 및 구독을 할때 차이가 있습니다. 바로 예제 코드와 로그를 통해 알아보겠습니다. let disposeBag = DisposeBag() enum MyError: Error { case error } let publishSubject = PublishSubject() publishSubject.subscribe {print("publishSubject : \\($0)")} publishSubject.disposed(by: disposeBag) let behaviorSubject = BehaviorSubject(value: 1) behaviorSubject.subscribe {print("behaviorSu..