そのため、誰もサブスクライブしていない場合でも共有データを永続化せずに、遅延サブスクライブできるようにしたいと考えています。その後、誰かが再びサブスクライブすると、新しいオブザーバブルが作成されます。私は変数を使用しますが、誰もサブスクライブしていない場合は永続化したくありません (配列または int より大きいものを使用している場合、それらをメモリに保持したくないため)。私の現在の実装は機能しますが、再サブスクライブする場合を除き、最後の値を取得します。つまり、値は引き続き保持されます。オブザーバブルをnilに設定することを考えていますが、どこでそれを行うべきかわかりません。誰でもこれを完了するのを手伝ってもらえますか? 以下のコードは、ほとんどが機能していることを示していますが、誰も購読していないときにデータが残っているようです.
var switchTwoDisposable: Disposable? = nil
@IBAction func switchOneChanged(sender: UISwitch) {
if sender.on {
self.switchOneDisposable = currentNumber().subscribeNext { (value) in
log.debug("Switch 1: \(value)")
}
} else {
switchOneDisposable?.dispose()
}
}
@IBAction func switchTwoChanged(sender: UISwitch) {
if sender.on {
self.switchTwoDisposable = currentNumber().subscribeNext { (value) in
log.debug("Switch 2: \(value)")
}
} else {
switchTwoDisposable?.dispose()
}
}
var numberObservable: Observable<Int>? = nil
func currentNumber() -> Observable<Int> {
if let number = numberObservable {
return number
}
self.numberObservable = Observable<Int>.interval(5.0, scheduler: MainScheduler.instance).shareReplay(1)
return self.numberObservable!
}
// Switch 1 turned on
// logs "Switch 1: 0"
// logs "Switch 1: 1"
// Switch 2 turned on
// immediately logs "Switch 2: 1"
// logs "Switch 1: 2"
// logs "Switch 2: 2"
// Switch 1 turned off
// logs "Switch 2: 3"
// Switch 2 turned off
// nothing happens here until we take action again
// Switch 1 turned on
// logs "Switch 1: 3"
// logs "Switch 1: 0"