【发布时间】:2020-12-03 11:07:22
【问题描述】:
我有这个代码:
class ViewModel {
let email = CurrentValueSubject<String, Never>("")
private var isEmailValid: AnyPublisher<Bool, Never>?
var emailColor: AnyPublisher<UIColor, Never>?
private func validateEmail(email: String) -> Bool { return email == "1234@gmail.com" }
private func emailColor(isValid: Bool) -> UIColor { return isValid ? UIColor.black :
UIColor.red }
public func setupPublishers() {
isEmailValid = email
.map { self.validateEmail(email: $0) }
.eraseToAnyPublisher()
emailColor = email
.map { self.emailColor(isValid: self.validateEmail(email: $0)) }
.eraseToAnyPublisher()
}
}
在 setupPublishers 函数中,我将 isEmailValid 创建为来自 CurrentValueSubject 'email' 的映射。 我希望直接从“isEmailValid”映射它,但如果我这样做:
emailColor = isEmailValid
.map { self.emailColor(isValid: $0) }
.eraseToAnyPublisher()
我收到此错误:
Cannot convert value of type 'AnyPublisher<Bool, Never>' to expected argument type 'Bool'
Value of type 'UIColor?' has no member 'eraseToAnyPublisher'
这显然表明来自发布者的映射给了我实际价值,而不是另一个发布者。 那么我该如何完成这个任务呢?
【问题讨论】: