728x90
[2교시] RxSwift 활용하기 - 쓰레드의 활용과 메모리 관리
Stream의 분리 및 병합
- 단순하게 하나로 합친다.
- 두개의 observable 의 데이터 타입이 같아야 한다.
- 위의 데이터와 아래의 데이터를 하나의 쌍으로 만들어서 전달한다.
- 쌍이 되지 않으면 내려오지 않는다. (항상 두개의 데이터 쌍을 이뤄야함)
- 어떻게 쌍을 만들것이냐는 사용자가 결정한다.
- 데이터 타입이 달라도 된다.
[예시]
@IBAction func onLoad() {
editView.text = ""
self.setVisibleWithAnimation(self.activityIndicator, true)
let jsonObservable = downloadJson(MEMBER_LIST_URL)
let helloObservable = Observable.just("Hello World")
_ = Observable.zip(jsonObservable,helloObservable){$1 + "\n" + $0!}
.observeOn(MainScheduler.instance) // 메인쓰레드로 바뀌고
.subscribe ( onNext: {json in
self.editView.text = json
self.setVisibleWithAnimation(self.activityIndicator, false)
})
}
Hello World 와 json string 을 쌍으로 만든다.
- zip 은 쌍이 없으면 못 내려오지만 combineLatest 는 쌍이 없으면 가장 최근 데이터와 쌍을 이룬다.
RxSwift 기본 복습
- 비동기로 생성되는 데이터를 처리하기 위해서 completion 를 만들어서 전달했다
- return 으로 만들어서 전달하고 싶어서 나중에 생기는 데이터 class 를 만들었다
- 그런걸 제공하주는 유틸리티중 하나가 RxSwift 이다
- RxSwift에서 나중에 생기는 데이터 class 는 Observable 이다
- Observable의 데이터를 꺼내 쓰려면 subscribe 하면된다.
- Observable 을 만드는 방법은 create 를 호출해서 emitter 에 next 로 데이터를 넘기거나 error 처리하거나 complete 하면 된다.
- 동작을 취소하려면 Disposables.create {코드} 로 처리한다.
- Subscribe에 이벤트를 달아서 처리하면 된다.
- 기본 방법 외에 Suger api 를 제공해 준다.
- Suger를 특별히 operator 라고 부른다.
- 생성에 관련된 just, from operator가 있다.
- 데이터 전달 과정에 데이터를 조작하거나 쓰레드를 바꾸는 데도 operator 를 쓸 수 있다.
- subscribe 할 때도 event 를 받지 말고 처리하고 싶은 event 만 받아서 처리할 수 있다
- subscribe 하면 리턴값으로 Disposable 이 반환되는데 취소하고싶을 때 호출 해 주면 된다.
Disposable을 Dispose 하는 방법
var disposable : Disposable?
disposable = Observable.zip(jsonObservable,helloObservable){$1 + "\n" + $0!}
.observeOn(MainScheduler.instance) // 메인쓰레드로 바뀌고
.subscribe ( onNext: {json in
self.editView.text = json
self.setVisibleWithAnimation(self.activityIndicator, false)
})
//취소하고 싶을때 - viewWillDisappear 같은
disposable.dispose()
/*------------------------------------------------*/
//화면에 여러개의 취소시켜야 하는 작업이 있을 경우
var disposable : [Disposable] = []
let d = Observable.zip(jsonObservable,helloObservable){$1 + "\n" + $0!}
.observeOn(MainScheduler.instance) // 메인쓰레드로 바뀌고
.subscribe ( onNext: {json in
self.editView.text = json
self.setVisibleWithAnimation(self.activityIndicator, false)
})
disposable.append(d)
//취소하고 싶을때 - viewWillDisappear 같은
disposable.forEach{$0.dispose()}
Disposable suger api
- DisposeBag()
var disposable = DisposeBag()
let d = Observable.zip(jsonObservable,helloObservable){$1 + "\n" + $0!}
.observeOn(MainScheduler.instance) // 메인쓰레드로 바뀌고
.subscribe ( onNext: {json in
self.editView.text = json
self.setVisibleWithAnimation(self.activityIndicator, false)
})
//취소하고 싶을때 - viewWillDisappear 같은
disposable.insert(d)
더 귀찮을 때
var disposeBag = DisposeBag()
Observable.zip(jsonObservable,helloObservable){$1 + "\n" + $0!}
.observeOn(MainScheduler.instance) // 메인쓰레드로 바뀌고
.subscribe ( onNext: {json in
self.editView.text = json
self.setVisibleWithAnimation(self.activityIndicator, false)
})
.disposed(by: disposeBag)
RxCocoa
RxSwift의 기능을 UIKit 에 extention 으로 추가한 것이다.
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'RxSwift+MVVM' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for RxSwift+MVVM
pod 'RxSwift'
pod 'RxCocoa'
pod 'RxViewController'
end
728x90
'iOS > RxSwift' 카테고리의 다른 글
RxSwift: Observable (0) | 2020.07.09 |
---|---|
RxSwift: Hello RxSwift!🖐 (0) | 2020.07.08 |
RxSwift를 사용한 비동기 프로그래밍 #4 [마지막] (0) | 2020.06.03 |
RxSwift를 사용한 비동기 프로그래밍 #3 (0) | 2020.05.29 |
RxSwift를 사용한 비동기 프로그래밍 #1 (0) | 2020.05.27 |
댓글