【发布时间】:2021-04-18 21:39:28
【问题描述】:
我想将发布者转换为另一个发布者,但出现错误Cannot convert return expression of type 'AnyPublisher<LoginState, LoginRepositoryError>' to return type 'AnyPublisher<LoginState, Never>'
我的方法可行吗?,我有以下代码:
public protocol LoginUseCase {
func login(email: String, password: String) -> AnyPublisher<Bool, LoginRepositoryError>
}
MyViewmodel.swift
public func login(email: String?, password: String?) -> AnyPublisher<LoginState, Never> {
guard let email=email, !email.isEmpty else {
return Just<LoginState>(.invalidEmail).eraseToAnyPublisher()
}
guard let password=password, !password.isEmpty else {
return Just<LoginState>(.invalidPassword).eraseToAnyPublisher()
}
return loginUseCase.login(email: email, password: password)
.map { result in
let subject = PassthroughSubject<LoginState, Never>()
switch result {
case .success(_):
subject.send(.success)
break
case .failure(let error):
switch error {
case .wrongPassword:
subject.send(.wrongPassword)
case .userNotExist:
subject.send(.error)
case .emailValidationPending:
subject.send(.emailValidationPending)
}
}
return subject.eraseToAnyPublisher()
}.eraseToAnyPublisher()
}
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/a/63281155/560942
-
这里有很多问题,但首先 - 如果
login返回Bool的发布者,您如何处理result就像它是Result类型一样?