在 Combine 中将 Publisher 的错误类型转换为 Never

Converting Publisher's error type to Never in Combine

我有一个发布者

var subject = PassthroughSubject<Int, Error>()

我想将其转换为

PassthroughSubject<Int, Never>

有没有办法实现这个?

编辑 - 更多详细信息

我不希望 Publisher 完成并且链接的答案不起作用,因为 catch 仍然完成了发布者。

下面是使用 catch<Int, Error> 转换为 <Int, Never> 的示例:

import UIKit
import Combine
class ViewController: UIViewController {
    let subject = PassthroughSubject<Int, Error>()
    var storage = Set<AnyCancellable>()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.subject
            .catch { what in
                Empty(completeImmediately:false)
            }
            .sink {print([=10=])}
            .store(in: &self.storage)
    }
}

如果你现在发送 1 到直通主题,你会得到 1 最后。但是,如果您向直通主题发送错误,则最后没有错误到达;管道端类型为 <Int, Never>.

但是,请注意,您永远不能发送另一个值。这与管道无关;这是因为一旦您通过 Subject 发送错误,该 Subject 就死了。你对此无能为力。