gpt4 book ai didi

ios - RXswift,重复可观察直到完成

转载 作者:行者123 更新时间:2023-11-30 11:26:25 26 4
gpt4 key购买 nike

我正在尝试将固件上传到 BLE 设备。因此,我推送一些数据,等待确认,然后推送更多数据,依此类推。但我正在努力重复观察者,直到观察者完整返回。

这是观察者,因此如果没有更多数据包要发送,它应该完成并停止重复。

let transferImage = Observable<Void>.create { (obs) -> Disposable in
guard let nextPacket = dataSendingTracker.getNextPacket() else {
obs.onCompleted()
return Disposables.create()
}

return self.instrument()
.flatMap{ $0.sendFWpacket(packet: nextPacket) }
.subscribe(onNext: { () in
obs.onNext(())
}, onError: { (error) in
obs.onError(error)
})
}

关于如何实现这一目标有什么建议吗?

最佳答案

尝试这样的方法,但我认为这种方式很难看......而不是 Rx 解决方案

当 getNextPacket 返回 nil 或这种情况下 Integer 小于零时,transferImage.takeWhile 将停止..

     func test() {
let transferImage = Observable<Int>.create { (obs) -> Disposable in
if let nextPacket = self.getNextPacket() {
obs.onNext(nextPacket)

} else{
obs.onNext(-1)
obs.onCompleted()

}
return Disposables.create()
}

transferImage.takeWhile{$0 > 0}.subscribe(onNext: { nextPacket in
print(nextPacket)
let completed = self.sendFWpacket()
if !completed {
self.test()
}

}, onError: { error in
print(error)
}, onCompleted: {
print("onCompleted")
}) {
print("disposed")
}.disposed(by: disposeBag)

}

func sendFWpacket()-> Bool {
return false
}

func getNextPacket() -> Int? {
return 1
}

关于ios - RXswift,重复可观察直到完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50697727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com