gpt4 book ai didi

swift - 如何: Detect if a observable has not emitted any events for specific time in RxSwift

转载 作者:行者123 更新时间:2023-12-03 07:57:12 26 4
gpt4 key购买 nike

rxSwift的新手,它试图学习一个简单的函数。在可观察序列上使用.timeout时,如果序列中的可观察对象之一未发出事件,则它将返回错误消息Unhandled error happened: Sequence timeout.

这是我尝试处理不再接收到的可观察事件,如果有更好的方法可以实现,请提出建议!

如果.timeout运算符返回错误消息,如何触发警报。
.timeout信息:
概要

对可观察序列中的每个元素应用超时策略。如果从其前任开始的指定超时时间内未接收到下一个元素,则会将TimeoutError传播给观察者。
宣言
dueTime发生超时之前,值之间的最大持续时间。
scheduler计划程序,用于运行超时计时器。
Returns
在超时情况下带有RxError.timeout的可观察序列。

代码:

    Observable.combineLatest(currentUser, opponent, game)
.timeout(3, scheduler: MainScheduler.instance)


.subscribe(onNext: { (arg) -> Void in

let (currentUser, opponent, game) = arg

if game.isPlayersTurn(currentUser) {
self._turnState.onNext(.yourTurn)
} else if game.isPlayersTurn(opponent) {
self._turnState.onNext(.theirTurn)
} else if game.isTie() {
self._turnState.onNext(.tie)
} else if game.gameData.winner == currentUser.userId {
self._turnState.onNext(.win(opponentWon: false))
} else if game.gameData.winner == opponent.userId {
self._turnState.onNext(.win(opponentWon: true))
}
})
.disposed(by: disposeBag)
}

最佳答案

制作UIAlert

首先,制作一个alertController。

let avc = UIAlertController(title: "Your Title Here", message: "The message you wish to display", preferredStyle: .alert)

接下来,您需要采取行动;这些具有在按下 Action 按钮后在完成处理程序中执行代码的选项
    let yourAction = UIAlertAction(title: "Save", style: .default) { (action) in
//Your code that wishes to be executed after the butt has been pressed
}

然后,将 Action 添加到 Controller 中
avc.addAction(yourAction)

那么您需要做的就是呈现警报
present(avc, animated: true, completion: nil)

关于swift - 如何: Detect if a observable has not emitted any events for specific time in RxSwift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58380406/

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