※ この記事は問題編です。本編である解説編と合わせてご覧ください。
この記事何?
-
RxSwift Advent Calendar 2016の22日目の記事の前置きみたいなものです。
-
クイズを通して、マルチスレッド環境下におけるRxSwiftの挙動と、
observeOn
・subscribeOn
などのオペレーターやDriver
・ControlEvent
などのスレッド周りの性質を解説していきます -
この記事自体には解答・解説は含みません。後編かつ本編である解説編をご覧ください。
クイズについて
- 以下のクイズは、イベントがどのスレッドにて流れてくるかを当てるクイズです。
- メインスレッドじゃないスレッドをまとめて「バックグラウンドスレッド」と呼びます。
- 特に明示的に指定されていなければメインスレッドだと思ってください。つまりトップレベルはメインスレッドです。
-
.addDisposableTo(disposeBag)
は省略してます。
第1問
(1)のmapにはどのスレッドでイベントが流れてくるでしょう?
Observable.of(1, 2, 3)
.map { $0 * 2 } // (1)
.subscribe()
第2問
(1)のmapにはどのスレッドでイベントが流れてくるでしょう?
let o = Observable.of(1, 2, 3)
.map { $0 * 2 } // (1)
backgroundQueue.async {
o.subscribe() // バックグラウンドでsubscribe
}
第3問
(1)のmapにはどのスレッドでイベントが流れてくるでしょう?
let o = Observable.of(1, 2, 3)
.map { $0 * 2 } // (1)
.publish()
o.subscribe()
backgroundQueue.async {
o.connect()
}
第4問
(1)のmapにはどのスレッドでイベントが流れてくるでしょう?
let o = Observable.of(1, 2, 3)
.map { $0 * 2 } // (1)
.share()
backgroundQueue.async {
// バックグラウンドスレッド
o.subscribe()
mainQueue.async {
// メインスレッド
o.subscribe()
}
}
第5問
(1)のmapにはどのスレッドでイベントが流れてくるでしょう?
let o = Observable.of(1, 2, 3, scheduler: mainScheduler)
.map { $0 * 2 } // (1)
backgroundQueue.async {
o.subscribe()
}
第6問
(1), (2) のmapにはどのスレッドでイベントが流れてくるでしょう?
Observable.of(1, 2, 3)
.map { $0 * 2 } // (1)
.observeOn(backgroundScheduler)
.map { $0 * 2 } // (2)
.subscribe()
第7問
(1), (2) のmapにはどのスレッドでイベントが流れてくるでしょう?
Observable.of(1, 2, 3)
.map { $0 * 2 } // (1)
.subscribeOn(backgroundScheduler)
.map { $0 * 2 } // (2)
.subscribe()
第8問
(1), (2) のmapにはどのスレッドでイベントが流れてくるでしょう?
Observable.of(1, 2, 3, scheduler: backgroundScheduler)
.map { $0 * 2 } // (1)
.observeOn(mainScheduler)
.map { $0 * 2 } // (2)
.subscribe()
第9問
(1), (2) のmapにはどのスレッドでイベントが流れてくるでしょう?
Observable.of(1, 2, 3, scheduler: mainScheduler)
.map { $0 * 2 } // (1)
.subscribeOn(backgroundScheduler)
.map { $0 * 2 } // (2)
.subscribe()
第10問
(1), (2) のmapにはどのスレッドでイベントが流れてくるでしょう?
let o = Observable.of(1, 2, 3)
ControlEvent<Int>(events: o)
.map { $0 * 2 } // (1)
.subscribeOn(backgroundScheduler)
.map { $0 * 2 } // (2)
.subscribe()
第11問
(1), (2) のmapにはどのスレッドでイベントが流れてくるでしょう?
let o = Observable.of(1, 2, 3, scheduler: backgroundScheduler)
ControlEvent<Int>(events: o)
.map { $0 * 2 } // (1)
.subscribeOn(backgroundScheduler)
.map { $0 * 2 } // (2)
.subscribe()
第12問
(1) のmapにはどのスレッドでイベントが流れてくるでしょう?
let d = Observable.of(1, 2, 3)
.asDriver(onErrorJustReturn: 0)
.map { $0 * 2 } // (1)
backgroundQueue.async {
d.drive()
}
第13問
(1) のmapにはどのスレッドでイベントが流れてくるでしょう?
Observable.of(1, 2, 3, scheduler: backgroundScheduler)
.asDriver(onErrorJustReturn: 0)
.map { $0 * 2 } // (1)
.drive()
解答・解説編
こちらへ ↓
RxSwiftスレッドクイズ(解答・解説編)