新的Xcode 11 beta 4已从Combine框架中删除了
Publishers.Once
结构体。有什么替代方案?
Just
似乎是最合适的候选项,但它不能用于返回类型为AnyPublisher<Bool, Error>
的方法,因为与Just
相关联的Failure
类型是Never
。
例如,在下面的方法中,我可以返回Publishers.Once
,因为相关联的Failure
类型不是Never
。func startSignIn() -> AnyPublisher<Void, Error> {
if authentication.provider == .apple {
let request = ASAuthorizationAppleIDProvider().createRequest()
request.requestedScopes = [.email, .fullName]
let controller = ASAuthorizationController(authorizationRequests: [request])
controller.delegate = self
controller.performRequests()
return Publishers.Once(()).eraseToAnyPublisher()
} else {
return SignInManager.service.startSignIn(auth: authentication)
.map { (auth) -> Void in
self.authentication = auth
}.eraseToAnyPublisher()
}
}
但是现在当我把它改回Just
时,我会收到一个编译错误,抱怨Just
不能被返回,因为该方法应该返回一个带有关联的Failure
类型的发布者。
func startSignIn() -> AnyPublisher<Void, Error> {
if authentication.provider == .apple {
let request = ASAuthorizationAppleIDProvider().createRequest()
request.requestedScopes = [.email, .fullName]
let controller = ASAuthorizationController(authorizationRequests: [request])
controller.delegate = self
controller.performRequests()
return Just(()).eraseToAnyPublisher() //Error Here
} else {
return SignInManager.service.startSignIn(auth: authentication)
.map { (auth) -> Void in
self.authentication = auth
}.eraseToAnyPublisher()
}
}
有没有替代方案可以像 Publishers.Once
一样具有相关的故障类型?