【发布时间】:2020-06-10 15:22:29
【问题描述】:
我正在向发布者请求单个值,并希望在收到响应后终止。下面我只是在第一次之后释放取消令牌,有没有更好的方法来做到这一点?
extension MyInteractor {
private static var locationPermissionToken: Cancellable?
func requestLocationPermission(completion: @escaping (Result<Void, LocationError>) -> Void) {
Self.locationPermissionToken = locationProxy.authorizationPublisher
.sink { status in
Self.locationPermissionToken = nil
status ? completion(.success(())) : completion(.failure(.deniedLocationServices))
}
locationProxy.requestAuthorization()
}
}
【问题讨论】:
-
您的发布商是自定义发布商吗?是这样的话,我建议以一种在发出单个值后立即发送完成的方式来实现它。如果它不是自定义发布者,因此您无法修改其实现,那么通过取消
Cancellable引用手动取消订阅是您最好的选择。 -
这是一个自定义实现,我在另一个问题中有部分源代码你可以在这里看到:stackoverflow.com/questions/62307501/…
标签: swift reactive-programming combine