RxSwift 스터디 2주차 Observable
이번주차에는 Observable에 대해서 스터디
(참고링크)
http://reactivex.io/documentation/operators.html
ReactiveX - Operators
Introduction Each language-specific implementation of ReactiveX implements a set of operators. Although there is much overlap between implementations, there are also some operators that are only implemented in certain implementations. Also, each implementa
reactivex.io
목차
1. Observable이란?
2. Emitting이란?
3. Observabel의 LifeCycle
4. Operator (just, from, empty, never, range)
5. 메모리 누수를 막기위해 DisposeBag() 활용
6. (실습) 버튼 클릭 시에 텍스트 필드에 입력된 정보를 받아오기
1. Observable이란?
Observable은 다양한 이름으로 불릴 수 있음.

Emitting 이란?

Observabel의 LifeCycle
라이프사이클은 매우 중요해서 꼭 숙달하기.

Operator (just, from)
오퍼레이터들을 간단히 정리
Creating Observables
- just : 단일 시퀀스로 내려보내줌
- from : 하나하나 따로 내려보내줌
이외에도 다른 오퍼레이터들도 존재하는데, 생성에 관여하는 옵저버블.
let stringSequence = Observable.just("this is string yo")
let oddSequence = Observable.from([1, 3, 5, 7, 9])
let dictSequence = Observable.from([1:"Rx",2:"Swift"])
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("----stringSequence:just---")
stringSequence.subscribe { (event: Event<String>) in
print(event)
}.disposed(by: disposeBag)
print("----oddSequence:from---")
oddSequence.subscribe { (event: Event<Int>) in
print(event)
}.disposed(by: disposeBag)
print("----dictSequence:from---")
dictSequence.subscribe { (event: Event<(key: Int, value: String)>) in
print(event)
}.disposed(by: disposeBag)
}

- empty: 빈 옵저버블
- never: 절대 실행되지 않음. (Complete는 적용)
print(" ===== never ===== ")
let neverSequence = Observable<String>.never()
let neverSequenceSubscription = neverSequence
.subscribe { _ in
print("This will never be printed")
}
neverSequenceSubscription.disposed(by: disposeBag)
print(" ===== empty ===== ")
Observable<Int>.empty()
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
결과

never의 사용 이유

empty의 사용 이유

- range: 범위
- 마치 for문처럼 사용
print(" ===== range ===== ")
Observable.range(start: 1, count: 10)
.subscribe { print($0) }
.disposed(by: disposeBag)

메모리 누수를 막기위해 DisposeBag() 활용.
RxSwift는 캡처를해서 사용하다 보니까 클로저에서 Copy해서 사용해야 누수가 발생하지 않음.
제일 간단하게 하려면 [weak self]를 사용하여 이를 예방할 수 있음.
그리고 disposeBag에 등록해서 관찰하는 스트림들을 모두 놓아주어야 뷰가 해제될 때 메모리 누수가 발생하지 않음
(실습) 버튼 클릭 시에 텍스트 필드에 입력된 정보를 받아오기
아래는 샘플 코드
override viewDidLoad() {
button.rx.tap.subscribe(onNext: { [weak self] next in
guard let self else { return }
self.myJust(element: self.textField.text ?? "null")
.subscribe { s in print(s) }
}).disposed(by: disposeBag)
}
func myJust<E>(element: E) -> Observable<E> {
return Observable.create { observer in
observer.on(.next(element))
observer.on(.completed)
return Disposables.create()
}
}
'apple > RxSwift, ReactorKit' 카테고리의 다른 글
| RxSwift 스터디 5주차 Filtering Observables (0) | 2021.07.10 |
|---|---|
| RxSwift 스터디 4주차 Subject (0) | 2021.07.10 |
| RxSwift 스터디 3주차 Creating Observables (0) | 2021.07.09 |
| RxSwift 스터디 1주차 Hello RxSwift (0) | 2021.07.07 |
| RxSwift 4시간 만에 끝내기 (0) | 2021.07.06 |