如果使用 Combine 的网络调用 returns 错误,如何分配 nil

How to assign nil if network call returns error using Combine

我有一个具有默认值的变量。并进行网络调用以从服务器获取值。如果它 returns 有一些错误,那么我想将变量设置为 nil。我如何使用 FuturePromiseCombine 执行此操作?

使用 Combine Framework 在 Swift 中使用 Futures 和 Promises 进行异步编程

问题是 futureOutputInt,所以你不能用 nil 替换错误,你需要用 Int,因为上游发布者的 Output 和下游运营商的输入必须始终匹配。

您可以通过将 futureOutput 映射到 Optional<Int> 来解决问题,然后您可以将错误替换为 nil

future
        .receive(on: RunLoop.main)
        .map(Optional.some)
        .replaceError(with: nil)
        .assign(to: &$count)

此外,assign(to:)Published.Publisher 作为其输入,因此您需要使用 count @Published 并传入其 Publisher $countassign.

所以将声明更改为@Publised var count: Int? = 0

用 nil 值替换错误失败,因为你的 Future 发出了一个 Int 值。将其更改为可选 Int?:

var count: Int? = 0

    let future = Future<Int?, Error> { promise in
        promise(.failure(DummyError()))
    }.eraseToAnyPublisher()

    init(){
        future
            .receive(on: RunLoop.main) //Getting error
            .replaceError(with: nil)
            .assign(to: &$count)
    }

assign(to: &) 仅适用于 @Published 值。