gpt4 book ai didi

swift - 合并接收器 : ignore receiveValue, 只需要完成

转载 作者:行者123 更新时间:2023-12-04 13:06:21 25 4
gpt4 key购买 nike

考虑以下代码:

        CurrentValueSubject<Void, Error>(())
.eraseToAnyPublisher()
.sink { completion in

switch completion {
case .failure(let error):
print(error)
print("FAILURE")
case .finished:
print("SUCCESS")
}
} receiveValue: { value in
// this should be ignored
}
只看 CurrentValueSubject初始化程序,很明显不需要该值/无关紧要。
我正在使用这个特定的发布者来发出一个可以通过或失败的异步网络请求。
由于我对这个发布者返回的值不感兴趣(没有),我怎样才能摆脱 receiveValue关闭?
理想情况下,调用站点代码应如下所示:
        CurrentValueSubject<Void, Error>(())
.eraseToAnyPublisher()
.sink { completion in

switch completion {
case .failure(let error):
print(error)
print("FAILURE")
case .finished:
print("SUCCESS ")
}
}
也可能是我应该使用除 AnyPublisher 以外的其他东西,所以如果 API 更符合目的,请随时提出/重写 API。
我能找到的最接近的解决方案是 ignoreOutput ,但它仍然返回一个值。

最佳答案

您只需完成即可声明另一个接收器:

extension CurrentValueSubject where Output == Void {

func sink(receiveCompletion: @escaping ((Subscribers.Completion<Failure>) -> Void)) -> AnyCancellable {
sink(receiveCompletion: receiveCompletion, receiveValue: {})
}
}

关于swift - 合并接收器 : ignore receiveValue, 只需要完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69311371/

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