首页 > 解决方案 > 如何更改 Driver 类型的属性的值使用 Driver 类型的属性?

问题描述

我是 RxSwift 的新手,我很抱歉这个问题是多么糟糕,但我找不到合适的术语。

所以基本上我有let infoIconTapped: Driver<Void>一个结构,我有let shouldShowInfoPopup: Driver<Bool>另一个结构。

我想做的是我想将(或驱动它)的值更改shouldShowInfoPopuptruefalse使用infoIconTapped. 这应该Driver只使用我的要求来完成。

关于如何做到这一点的任何想法?

标签: iosobservablerx-swift

解决方案


听起来您想要做的是根据对按钮的点击来切换弹出窗口的可见性。如果是这样,那么您需要维护状态,这意味着使用.scan运算符。

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

以上将是一个自由函数(不在任何类或结构中),可以像这样使用:

let showInfo = shouldShowInfoPopup(infoIconTapped: infoIconTapped)

如果必须将函数放在类或结构中,则将其放在 Driver 本身的扩展中,如下所示:

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

可以这样使用:

let shouldShowInfoPopup = infoIconTapped.shouldShowInfoPopup

推荐阅读