Yani hiç kimse abone olmadığında daimi olmadan paylaşılan verilere abone olmak istiyorum. Sonra birileri tekrar üye olursa, yeni bir gözlemlenebilir. Bir Değişken kullanabilirdim, ancak hiç kimsenin abone olmaması durumunda ısrar etmesini istemiyorum (çünkü dizilerden daha büyük bir şey kullanıyor olsaydım, bunları bellekte tutmak istemiyorum). Güncel uygulama çalışmalarım, yeniden abone olmanın dışında hala son değeri alır, yani değer hala devam eder. Gözlemlenebilir olanı sıfır olmaya ayarlıyorum ama bunu nerede yapacağımı bilmiyorum. Bunu bana tamamlayan biri var mı? Aşağıdaki kod çoğunlukla çalışmakta olduğunu gösterir, ancak hiç kimse abone olmadığında verilerin gizlenmesini sağlar.RxSwift: Nasıl abonelik olsun tembelleşmek için shareReplay kullanmak
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"