Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将一个AnyPublisher映射到另一个AnyPublisher_Swift_Combine - Fatal编程技术网

Swift 将一个AnyPublisher映射到另一个AnyPublisher

Swift 将一个AnyPublisher映射到另一个AnyPublisher,swift,combine,Swift,Combine,我有以下代码: class ViewModel { let email = CurrentValueSubject<String, Never>("") private var isEmailValid: AnyPublisher<Bool, Never>? var emailColor: AnyPublisher<UIColor, Never>? private func validateEmai

我有以下代码:

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()
    }
}
我得到这个错误:

Cannot convert value of type 'AnyPublisher<Bool, Never>' to expected argument type 'Bool'
Value of type 'UIColor?' has no member 'eraseToAnyPublisher'
无法将“AnyPublisher”类型的值转换为预期的参数类型“Bool”
“UIColor”类型的值没有成员“eraseToAnyPublisher”
这显然表明来自发布服务器的映射为我提供了实际值,而不是其他发布服务器。
那么我怎样才能完成这个任务呢?

这个错误消息没有任何意义,真正的错误是
isEmailValid
可选的
,所以你需要在它上面使用可选链接才能调用
映射

emailColor = isEmailValid?
        .map { self.emailColor(isValid: $0) }
        .eraseToAnyPublisher()

谢谢,有趣的是,编译器没有让我注意到这一点。这是一个非常基本的错误:)
emailColor = isEmailValid?
        .map { self.emailColor(isValid: $0) }
        .eraseToAnyPublisher()