@IBAction func exMap3() {
Observable.just("800x600")
// 컨커런시 하게 하기 위해서 observeOn
.observeOn(ConcurrentDispatchQueueScheduler(qos: .default)) // 새 쓰레드
.map { $0.replacingOccurrences(of : "x", with : "/") }
.map {"<https://picsum.photo/\\($0)/?random>"}
.map { URL(string: $0)}
.filter { $0 != nil}
.map {$0!}
.map {try Data(contentsOf: $0)}
.map { UIImage(data:$0)}
// 여기 부터는 메인 쓰레드로 돌아와야 하니까
observeOn(MainScheduler.instance)
.subscribe(onNext: { image in
self.imageView.image = image
})
.disposed(by: disposeBag)
}
//만약 just 부터 비동기 쓰레드로 작업하고 싶다면 subscribeOn 사용 위치는 아무대나 있어도 상관없음
@IBAction func exMap3() {
Observable.just("800x600")
// 컨커런시 하게 하기 위해서 observeOn
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .default)) // 새 쓰레드
.map { $0.replacingOccurrences(of : "x", with : "/") }
.map {"<https://picsum.photo/\\($0)/?random>"}
.map { URL(string: $0)}
.filter { $0 != nil}
.map {$0!}
.map {try Data(contentsOf: $0)}
.map { UIImage(data:$0)}
// 여기 부터는 메인 쓰레드로 돌아와야 하니까
observeOn(MainScheduler.instance)
.subscribe(onNext: { image in
self.imageView.image = image
})
.disposed(by: disposeBag)
}
// side effect : 외부에 영향을 주는 부분 아래 코드에서는 유아이 그리는 부분
// 1. subscribe 에서 허용
// 2. do 에서 허용
@IBAction func exMap3() {
Observable.just("800x600")
// 컨커런시 하게 하기 위해서 observeOn
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .default)) // 새 쓰레드
.map { $0.replacingOccurrences(of : "x", with : "/") }
.map {"<https://picsum.photo/\\($0)/?random>"}
.map { URL(string: $0)}
.filter { $0 != nil}
.map {$0!}
.map {try Data(contentsOf: $0)}
.map { UIImage(data:$0)}
// 여기 부터는 메인 쓰레드로 돌아와야 하니까
observeOn(MainScheduler.instance)
.subscribe(onNext: { image in
self.imageView.image = image // 여기가 사이드 이펙트
})
.disposed(by: disposeBag)
}