ios - 如何更改 Driver 类型的属性的值使用 Driver 类型的属性?
问题描述
我是 RxSwift 的新手,我很抱歉这个问题是多么糟糕,但我找不到合适的术语。
所以基本上我有let infoIconTapped: Driver<Void>
一个结构,我有let shouldShowInfoPopup: Driver<Bool>
另一个结构。
我想做的是我想将(或驱动它)的值更改shouldShowInfoPopup
为true
或false
使用infoIconTapped
. 这应该Driver
只使用我的要求来完成。
关于如何做到这一点的任何想法?
解决方案
听起来您想要做的是根据对按钮的点击来切换弹出窗口的可见性。如果是这样,那么您需要维护状态,这意味着使用.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
推荐阅读
- javascript - D3.csv 读入 promise
- jquery - 如果元素的子元素为空,则将类添加到该元素的另一个子元素
- azure-functions - Cosmos DB changefeed 突然没有触发 Azure Function 触发器
- java - Avro 无法使用更新的架构反序列化消息
- javascript - 科尔多瓦 - 安卓。将文件写入普通用户可访问的目录
- java - 如何使用 IntStream 对 int 数组的特定索引数求和?
- jenkins - Jenkinsfile 访问 aws 凭据
- python - 为什么我的代码无视我的条件?
- java - 单击 div 中的提交按钮不会将属性显示设置为无
- python - 根据条件计算数据框中的正负连续元素