Так что я хочу иметь возможность лениво подписаться на общие данные, не сохраняя при этом, что никто не подписывается. Затем, если кто-то снова присоединится к подписке, будет создан новый наблюдаемый. Я бы использовал переменную, но я не хочу, чтобы она сохранялась, если никто не подписался (потому что, если я использую массивы или нечто большее, чем 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"