誰も購読していないときに永続することなく、共有データを遅れて購読することができるようにしたい。その後、誰かが再び購読すると、新しい観測値が作成されます。変数を使用しますが、誰も購読していなければ永続化したくありません(なぜなら、配列を使用していたり、intよりも大きいものをメモリに保持したくないからです)。私の現在の実装は機能しますが、それでもまだサブスクライブしても最後の値が得られます。つまり、値はまだ保持されています。私はobservableを無限に設定しようと考えていますが、どこでそれを行うべきかわかりません。誰も私がこれを完了するのを助けることができる?下のコードはほとんどの場合動作していますが、誰も購読していないときにデータが固執しているようです。RxSwift:shareReplayを使ってlazily get subscriptionを利用する方法
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"