在评估第二个未来后,Swift Combine 返回第一个未来的结果

时间:2021-01-27 15:53:14

标签: swift combine

我有以下情况:

2 个期货,一个返回我感兴趣的值,另一个执行一些操作并返回 void。两者互不相关(因此代码不应混用),但两者都需要在应用程序逻辑中以正确的顺序执行。

我想做的是订阅执行以下操作的发布者:

  • 未来的人会执行并赋予价值
  • future 2 执行并且不返回任何内容
  • 订阅者在未来二执行后收到未来一的值。

这是一个无法编译的小代码示例,它显示了我想要实现的目标:

import Combine


func voidFuture() -> Future<Void, Error> {
    return Future<Void, Error> { promise in
        promise(.success(()))
    }
}

func intFuture() -> Future<Int, Error> {
    return Future<Int, Error> { promise in
        promise(.success(1))
    }
}

  

func combinedFuture() -> AnyPublisher<Int, Error> {
    var intValue: Int!

    return intFuture().flatMap { result in
        intValue = result
        return voidFuture()
    }.flatMap{ _ in
        return CurrentValueSubject(intValue).eraseToAnyPublisher()
    }.eraseToAnyPublisher()
}

var subscriptions = Set<AnyCancellable>()

combinedFuture()
    .sink(receiveCompletion: { _ in }, receiveValue: { val in print(val)})
    .store(in: &subscriptions)


1 个答案:

答案 0 :(得分:0)

您需要将第二个发布者 (.map) 的 Void 结果voidFuture 返回到第一个发布者 (intFuture) 的结果,这就是 { {1}} 会发出:

.flatMap