Объедините два AnyPublisher в Combine - PullRequest
1 голос
/ 09 июля 2020

У меня есть два теста для имени пользователя, я хочу два, чтобы у меня были разные сообщения о длине имени пользователя и один для проверки действительности имени пользователя. объедините их, чтобы убедиться, что я могу включить свой регистр UIButton

@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()
}

Я пытаюсь сопоставить их, но это дает мне массив AnyPublisher. Это не то, что я хочу - я хочу объединить validLengthUsername && formattedUserName - я пробовал именно это, но не могу просто И два AnyPublisher.

1 Ответ

2 голосов
/ 09 июля 2020

Вы можете использовать zip для создания Publisher, который будет генерировать значение, как только оба издателя выпустят новое значение и используют оператор AND для элементов заархивированного издателя.

var fullValidation: AnyPublisher<Bool, Never> {
    validLengthUsername
        .zip(formattedUserName)
        .map { $0 && $1 }
        .eraseToAnyPublisher()
}
...