Swift 发布服务器接收器从不运行完成
我正在尝试合并两个发布服务器,但其中一个完成服务器从未运行。Swift 发布服务器接收器从不运行完成,swift,combine,Swift,Combine,我正在尝试合并两个发布服务器,但其中一个完成服务器从未运行。 下面是我如何创建我的两个发布者,并尝试使用.sink观察它们何时完成。featureFlagPublisher将按预期完成并打印“featureFlagPublisher已完成”,但migratePublisher和合并的发布服务器将永远不会完成。publisher.send(完成:.finished)已运行,但不会发生任何事情 private var cancellables = Set<AnyCancellable>(
下面是我如何创建我的两个发布者,并尝试使用
.sink
观察它们何时完成。featureFlagPublisher
将按预期完成并打印“featureFlagPublisher已完成”,但migratePublisher
和合并的发布服务器将永远不会完成。publisher.send(完成:.finished)
已运行,但不会发生任何事情
private var cancellables = Set<AnyCancellable>()
func start() {
let featureFlagPublisher = self.startFeatureFlagging()
let migratePublisher = self.migrate()
migratePublisher.sink { _ in
print("migratePublisher done")
} receiveValue: { _ in }.store(in: &cancellables)
featureFlagPublisher.sink { _ in
print("featureFlagPublisher done")
} receiveValue: { _ in }.store(in: &cancellables)
migratePublisher.merge(with: featureFlagPublisher)
.sink { completion in
print("All Done")
} receiveValue: { _ in }
.store(in: &cancellables)
}
private func startFeatureFlagging() -> AnyPublisher<Bool, Never> {
let future = Future<Bool, Never> { promise in
FeatureFlaggingService.shared.start {
promise(.success(true))
}
}
return future.eraseToAnyPublisher()
}
private func migrate() -> AnyPublisher<Bool, Never> {
let future = Future<Bool, Never> { promise in
FavoriteMigrationsAPI.shared.get { result in
switch result {
case .success(let favoriteIDs):
promise(.success(true))
...
}
}
return future.eraseToAnyPublisher()
}
private var cancelables=Set()
func start(){
让featureFlagPublisher=self.startFeatureFlagging()
让migratePublisher=self.migrate()
migratePublisher.sink{uu}in
打印(“已完成迁移发布程序”)
}receiveValue:{uUin}.store(in:&可取消项)
featureFlagPublisher.sink{uu}in
打印(“featureFlagPublisher已完成”)
}receiveValue:{uUin}.store(in:&可取消项)
migratePublisher.merge(与:featureFlagPublisher一起)
.sink{在中完成
打印(“全部完成”)
}receiveValue:{uIn}
.store(在:&可取消项中)
}
private func startFeatureFlagging()->AnyPublisher{
让未来=未来{承诺未来
FeatureFlaggingService.shared.start{
承诺(.成功(真实))
}
}
返回future.eraseToAnyPublisher()
}
private func migrate()->AnyPublisher{
让未来=未来{承诺未来
FavoriteMigrationsAPI.shared.get{结果在
切换结果{
成功案例(让FavoriteId):
承诺(.成功(真实))
...
}
}
返回future.eraseToAnyPublisher()
}