【发布时间】:2021-02-03 06:28:54
【问题描述】:
我正在将我的项目从 RxSwift 转移到 Combine 我有一个逻辑,我希望发布者每次单击按钮时都发出事件。实际点击按钮执行pushMe.send()
pushMe
.print("Debug")
.flatMap { (res) -> AnyPublisher<Bool, Error> in
return Future<Bool, Error>.init { closure in
closure(.failure(Errors.validationFail))
}.eraseToAnyPublisher()
}
.sink(receiveCompletion: { completion in
print("Completion received")
}, receiveValue: { value in
print("Value = \(value)")
})
.store(in: &subscriptions)
控制台结果
Debug: receive value: (true)
Completion received
Debug: receive value: (true)
Debug: receive value: (true)
我不明白为什么接收器只在第一个事件上收到错误。其余的点击被忽略。
【问题讨论】:
-
这就是发布者的工作方式:一旦遇到错误或完成,他们就会停止工作。这和在 RxSwift 中是一样的,这个模式在 RxSwift 中有效吗?
-
刚刚在 RxSwift 上写了一个示例测试,发现完全一样的行为。但是处理这种情况的主要方法是什么?怎么样处理该用户多次输入错误密码?
-
有几种模式可以处理这种情况,你应该可以在 SO 上找到它们,如果你找不到任何你可以随时提出新问题。
标签: swift error-handling combine