Как изменить значение свойства типа Driver <Bool>, используя свойство типа Driver <Void>? - PullRequest
1 голос
/ 15 апреля 2020

Я новичок в RxSwift и извиняюсь за то, как плохо сформулирован вопрос, но я не смог найти правильную терминологию.

Так что в основном у меня есть let infoIconTapped: Driver<Void> в одной структуре, и у меня есть let shouldShowInfoPopup: Driver<Bool> в другой структуре.

Что я хочу сделать, так это то, что я хочу изменить значение (или ввести его) shouldShowInfoPopup на true или false, используя infoIconTapped. Это должно быть сделано с использованием Driver, что является моим требованием.

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 16 апреля 2020

Похоже, что вы хотите сделать, это переключить видимость всплывающего окна в зависимости от нажатия кнопки. Если это так, то вам нужно поддерживать состояние, а это означает использование оператора .scan.

func shouldShowInfoPopup(infoIconTapped: Driver<Void>) -> Driver<Bool> {
    return infoIconTapped
        .scan(false) { current, _ in !current }
        .startWith(false)
}

Выше было бы свободной функцией (не в любом классе или структуре) и может использоваться следующим образом:

let showInfo = shouldShowInfoPopup(infoIconTapped: infoIconTapped)

Если вы должны поставить функцию в классе или структуре, затем поместите ее в расширение для самого драйвера, как это:

extension SharedSequence where SharingStrategy == DriverSharingStrategy {
    var shouldShowInfoPopup: Driver<Bool> {
        scan(false) { current, _ in !current }
            .startWith(false)
    }
}

Что можно использовать следующим образом:

let shouldShowInfoPopup = infoIconTapped.shouldShowInfoPopup
...