所以,我希望能夠懶惰地訂閱共享數據,而沒有人在訂閱時不會持續共享數據。然後,如果有人再次訂閱,則會創建一個新的可觀察項。我會使用一個變量,但是如果沒有人訂閱,我不希望它持久化(因爲如果我使用的是數組或者比int更大的東西,我不想將它們保存在內存中)。我目前的實現工作,除了重新訂閱它仍然獲得最後一個值,這意味着該值仍然存在。我正在考慮將觀測值設置爲零,但我不知道該在哪裏做。任何人都可以幫我完成這個嗎?下面的代碼顯示它主要工作,但是看起來數據在沒有人訂閱時仍然存在。RxSwift:如何使用shareReplay來懶洋洋地獲得訂閱
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"