gpt4 book ai didi

ios - 如何用 OR 组合两个信号

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

我有两个来自通知的信号。这些是从外部框架触发的。

let successSignal = NotificationCenter.default.reactive.notifications(forName: NSNotification.Name(rawValue: "someNotification"))
let failedSignal = NotificationCenter.default.reactive.notifications(forName: NSNotification.Name(rawValue: "someNotification"))

现在我想将它们组合成 Signal<Notification, Error> 类型的一个信号。如果successSignal触发发送值,如果 failedSinal触发发送错误。

我不知道如何管理这个。

最佳答案

有一种方法可以做到这一点:

enum SignalErrors: Error {
case failedSignalValue
}

let failingFailed = failedSignal.flatMap(FlattenStrategy.latest) { _ in
return SignalProducer<Int, SignalErrors>(error: SignalErrors.failedSignalValue)
}

对于这个新信号,failedSignal 上的值将转换为 error 事件,因此 failingFailed 是一个信号,其上的事件failedSignal 现在以 .failed 形式到达,而不是 .value

保留Event Stream Grammar请记住 - 在一次 .failed 事件之后,信号终止!

let merged = Signal.merge([
successSignal
.promoteError(SignalErrors.self),
failingFailed
])

然后我们将 successSignalfailingFailed 信号合并在一起。 Since a .failed event behaves like an exception and propagates immediately ,当 .failed 事件到达 failingFailed 时,整个合并信号也会立即失败。

出于类型检查的原因,successSignal 上的 promoteError 是必需的。

关于ios - 如何用 OR 组合两个信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46200657/

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