Swift 在联合收割机中合并两个任意发布者

Swift 在联合收割机中合并两个任意发布者,swift,combine,Swift,Combine,我有两个用户名测试,我想要两个,这样我可以有不同的消息长度的用户名和一个用户名的有效性 到目前为止还不错,但我想将它们结合起来,以确保可以启用我的注册按钮 @Published var username: String = "" var validLengthUsername: AnyPublisher<Bool, Never> { return $username.debounce(for: 0.2, scheduler: RunLoop.main)

我有两个用户名测试,我想要两个,这样我可以有不同的消息长度的用户名和一个用户名的有效性

到目前为止还不错,但我想将它们结合起来,以确保可以启用我的注册按钮

@Published var username: String = ""

var validLengthUsername: AnyPublisher<Bool, Never> {
    return $username.debounce(for: 0.2, scheduler: RunLoop.main)
        .removeDuplicates()
        .map{$0.count > 6 ? true : false}
        .eraseToAnyPublisher()
}

var formattedUserName: AnyPublisher<Bool, Never> {
    return $username
        .removeDuplicates()
        .map{$0.isValidEmail() ? true : false}
        .eraseToAnyPublisher()
}
@Published var username:String=“”
var validLength用户名:AnyPublisher{
返回$username.debounce(对于:0.2,调度程序:RunLoop.main)
.removeDuplicates()
.map{$0.count>6?true:false}
.删除任何发布者()
}
var formattedUserName:AnyPublisher{
返回$username
.removeDuplicates()
.map{$0.isValidEmail()?true:false}
.删除任何发布者()
}

我正在尝试映射它们,但这给了我一个AnyPublisher数组。这不是我想要的-我想结合ValidLengtUserName和formattedUserName-我只是尝试了一下,但我不能简单地和这两个
任意发布者

你可以使用
zip
创建一个
发布者
,一旦两个发布者都发布了新值并对压缩发布者的元素使用and运算符,它将发出一个值

var fullValidation: AnyPublisher<Bool, Never> {
    validLengthUsername
        .zip(formattedUserName)
        .map { $0 && $1 }
        .eraseToAnyPublisher()
}
var fullValidation:AnyPublisher{
ValidLength用户名
.zip(格式化用户名)
.map{$0&&$1}
.删除任何发布者()
}