关于ios:如何在RXSwift中重置Observable interval运算符?

How to reset the Observable interval operator in RXSwift?

我是RXSwift的新手,我定义了一个Observable interval定时器序列,该序列每秒调用一次Webservice方法。
在该Web服务响应中,我收到新的重试时间值,该值必须替换为当前时间。
如何用新的时间值重置此序列?
这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func mySequence() {

    /////////////////////////////////////// subscribe to Timer (time change)
    var time = try! self.timer.value()

    self.disposeTimer = timer.subscribe({  value in

        time = value.element!

        print("=============================\\(String(describing: time))=======================================")

    })
    /////////////////////////////////////// subscribe to Timer (time change)


    let   observable = Observable<Int>.interval(TIME I NEED TO CHANGE After response , scheduler: MainScheduler.instance).map { _ in ()
        self.myWebserviceMethod()
    }

    disposable =  observable.subscribe(onNext: {num in

    }, onError: { err in

    }, onCompleted: {

    }, onDisposed: {

    })

}

所有事情都会发生,但是间隔计时器时间仍然是旧值:(


只需删除(处置)旧订阅并以新间隔创建新订阅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var timerDisposable:Disposable?
var retryTime:RxTimeInterval = 1

func stratRefresh() {
    timerDisposable?.dispose()
    timerDisposable = Observable<Int>
        .timer(0, period: retryTime, scheduler: MainScheduler.instance)
        .subscribe(onNext: { value in
            myWebserviceMethod()
        })
}

func myWebserviceMethod() {
    // In service response update your retryTime
    // Ex.
    APIClient.getRetryTime() { newTime in
        if retryTime != newTime {
            retryTime = newTime
            stratRefresh()
        }
    }
}