gpt4 book ai didi

ios - 合并:像Future一样的发布者,但具有多个值(value)

转载 作者:行者123 更新时间:2023-12-01 21:48:45 25 4
gpt4 key购买 nike

我有使用此方法的3d派对库(Firestore)

func listenToEvents(handler: ([Result], Error) -> Void)

此方法中的 handler被多次调用(在数据更新之后)。我想将其转换为 Publisher
现在是我的代码:
var resultsPublisher: AnyPublisher<[Result], Error> {
Deferred {
Future { promise in
libraryObject.listenToEvents { results, error in // called multiple times
guard let results = results else {
promise(.failure(error))
return
}

// this can't be called several times,
// because Future's promise is supposed to be called only once
promise(.success(results))
}
}
}
.eraseToAnyPublisher()
}

因此,我的 Publisher仅产生一次值,因为 Future以这种方式工作。是否有其他 Publishers(或可能是其他方法)来完成此操作?

最佳答案

这是可能的替代方法。不需要Defercause subject lives idle, and can send (pass-through) as many values as libraryObject将继续存在。

使用Xcode 11.4测试。

var resultsPublisher: AnyPublisher<[Result], Error> {
let subject = PassthroughSubject<[Result], Error>()
libraryObject.listenToEvents { results, error in // called multiple times
guard let results = results else {
subject.send(completion: .failure(error))
return
}

subject.send(results)
}
return subject.eraseToAnyPublisher()
}

关于ios - 合并:像Future一样的发布者,但具有多个值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61851434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com