RxSwift:立即交付第一个项目,对后续项目进行反跳

2024-03-04

我有一个文本字段需要验证,我想在用户键入时禁用按钮。用户停止输入后(1 秒去抖),将执行验证并根据结果有条件地启用按钮。请注意当用户仅键入一个字符时的极端情况,验证仍然应该发生。

--"a"-"ab"-"abc"------------------"ab"--"a"------------------"ab"-----------------

--false---------validate("abc")---false----validate("a")-----false--validate("ab")

这个所以(立即交付第一个项目,“消除”后续项目 https://stackoverflow.com/questions/30140044/deliver-the-first-item-immediately-debounce-following-items)在RxJava中提出了以下解决方案。但它似乎只返回第一个元素,而不是当用户在去抖后再次开始输入时返回?如果我错了请纠正我

Observable.from(items).publish(publishedItems -> 
    publishedItems.limit(1).concatWith(
        publishedItems.skip(1).debounce(1, TimeUnit.SECONDS)
    )
)

一种选择是将问题“用户是否正在键入”与“输入是否有效”分开。

描述用户是否正在打字的一种(有点笨拙)方式:

let isTyping = PublishSubject<Bool>()

textField.rx.text
    .map { _ in true }
    .bind(to: isTyping)
    .disposed(by: disposeBag)

textField.rx.text
    .debounce(1.0, scheduler: MainScheduler.instance)
    .map { _ in false}
    .bind(to: isTyping)
    .disposed(by: disposeBag)

然后,您可以像这样描述按钮启用状态:

isTyping.withLatestFrom(isValid) { !$0 && $1 }
            .bind(to: button.rx.isEnabled)

当然,为了让这种方法在用户开始输入时立即生效,最好isValid从一个值开始。

您还可以通过以下方式简化它。如果这些值仅在本地使用,这可能没问题。

textField.rx.text
    .map { _ in false }
    .bind(to: button.rx.isEnabled)
    .disposed(by: disposeBag)

textField.rx.text
    .debounce(1.0, scheduler: MainScheduler.instance)
    .flatMap { [weak self] in self?.validate($0) }
    .bind(to: button.rx.isEnabled)
    .disposed(by: disposeBag)

请注意,使用这种方法,当用户恢复输入时,需要取消异步验证操作。

希望有人可以提出一个更清洁的解决方案,但我认为这是一个不错的起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxSwift:立即交付第一个项目,对后续项目进行反跳 的相关文章

随机推荐

  • 仅当 r 中满足条件时,数据帧内的增量计数器

    我想创建一个累积增量计数器 仅在满足条件时才会增加 DT lt data table id c 1 1 1 1 1 1 1 2 2 2 b c 10L 5L 3L 4L 2L 6L 1L 3L 5L 7L 我没有得到想要的结果rleid因为
  • 将不同数据集与 R 中的堆积条形图进行比较

    我需要比较两种不同的方法 每种方法使用堆叠条形样式在一张图中有 3 个不同的结果 我想画一个图 以便 x 轴显示实验 y 轴显示结果 每个条形以堆叠条形格式填充 3 个结果 experiment method resuult1 result
  • 我的应用程序可以与 Moodle 通信吗?

    我正在考虑构建一个学生应用程序 它将使用 Moodle 数据 并在上传新文件时通知用户 也许还可以执行诸如检查成绩等操作 我对 Android 编程很陌生 很容易与技术术语混淆 我浏览了一下网络 发现有一个 API 但我并不真正 100 知
  • 使用 SMTPHandler 整理 Python 日志记录 MemoryHandler 中的输出

    我设置了日志记录模块 MemoryHandler 来对 SMTPHandler 目标的调试和错误消息进行排队 我想要的是当进程出错时发送一封电子邮件 其中包含截至该点的所有调试语句 每行一个 相反 我收到的是每条调试消息的单独电子邮件 这看
  • 在 HTML 中添加滚动条

    这是一个非常菜鸟的问题 我想我已经知道答案了 但是 您可以将滚动条添加到 div CSS div height 100px overflow auto jsFiddle http jsfiddle net alexdickson Wdj3M
  • Grafana 多值浮点 histogram_quantile

    嗨 我正在强制解决 histogram quantile 问题 如果我将变量设置为多值 这样我就可以重复面板 然后我收到错误消息 字符 21 处解析错误 意外字符 我的要求是 histogram quantile percentile av
  • 这两个查询之间的最佳实践

    我昨天参加了一个用户组会议 他们指出使用参数化查询比对查询进行编码更好 这让我开始思考 这是否有什么好处 显然规模比这大得多 DECLARE Client1 UNIQUEIDENTIFIER Client2 UNIQUEIDENTIFIER
  • 在 Mongoose 中使用连接和过滤器进行查询

    我是 Mongodb 的新手 并且在我使用 MEAN 堆栈构建的 Web 应用程序中使用它 我的目标是通过连接两个表并对它们应用过滤条件来查询它们 例如 我有两个表 自行车 自行车 ID 注册号 品牌 型号和预约 预约日期 状态 自行车 参
  • 样式属性与设置 ID 和外部 CSS

    我理解将所有表示元素保留在标记之外并将它们放入外部 css 文件中的概念 我想了解一下在什么类型的情况下您会认为使用样式属性与设置 ID 和外部 Css 是合理的 到目前为止 我已经经常使用 style 属性 我通常使用它来指定特定于该元素
  • 将直流电机添加到 Simscape 多体旋转关节

    我有以下直流电机模型和 2 轮机器人的 Simscape 多体模型 DC Motor with Torque Output Simscape Multibody Model of my Robot 我想控制机器人的速度 Simscape 多
  • yesod init 命令在 Windows 上不起作用

    我按照以下步骤安装 Yesod Web 框架 mkdir mypackage cd mypackage cabal update cabal sandbox init cabal install yesod platform yesod b
  • 从 Excel VBA 编辑 Outlook 电子邮件

    我有以下代码 可以成功使用在我的计算机本地保存的预制 Outlook 模板 文件名 并将 Active Excel 文档附加到其中 但是我想添加一些其他文本到电子邮件模板 以节省我复制和粘贴的时间 无论如何 是否可以将额外的正文文本添加到预
  • 多种差异工具

    我已经设置了我的git使用 P4Merge 作为 diff 工具 如上所述here http progit org book ch7 1 html So git diff将触发 P4Merge 然而 有时我发现使用 UNIXdiff更快 更
  • 如何在postgis中找到多边形内的所有点?

    我将位置存储在 location table point location 几何 中 现在我在谷歌地图上绘制一个多边形并将该多边形 几何 传递到后端 我想找到该多边形内的所有位置 SELECT POINT LOCATION FROM LOC
  • 如何找到对“已知”列表进行排序的最佳堆栈移动集?

    关于未知列表的排序问题 人们已经了解很多 但是寻找最优排序的问题呢 已知名单在堆栈机中 也就是说 假设您有以下堆栈机 4 1 3 2 即有3堆空间 其中1堆填满了数字 此外 假设您的堆栈机可以执行 2 个动作 move a b 放置顶部元素
  • 在 Symfony2 中向删除表单添加“确认选项”的最佳方法是什么?

    如果您使用控制台为 Symfony2 中的实体创建 CRUD 代码 您最终将得到一个非常基本的删除功能 此功能简洁高效 但不提供 您确定吗 确认 如果要删除的实体存在 则立即删除 有人对添加用户确认的最简单方法有建议吗 到目前为止我一直在使
  • 您如何搜索/访问用户数据?

    我想提醒正在注册的用户 他们选择的电子邮件地址已在我们的用户库中 在他们注册之前 同时 如何将他们 所需的 电子邮件与我的用户列表中的用户进行比较 用户到底存储在哪里以及如何访问该数据节点 您应该有一个用户节点 其中包含您的用户以及有关他们
  • 在 silverlight 中使用 MVVM 模式设置可见性

    我在银光下取了一个网格 最初 textbox2 是不可见的 当我单击 textbox1 时 我们必须看到 textbox2 我尝试如下
  • 如何使用 PrimeFaces 验证码?

    我经历了用户指南 http www primefaces org documentation html和showcase http www primefaces org showcase ui captcha jsf但找不到在支持 bean
  • RxSwift:立即交付第一个项目,对后续项目进行反跳

    我有一个文本字段需要验证 我想在用户键入时禁用按钮 用户停止输入后 1 秒去抖 将执行验证并根据结果有条件地启用按钮 请注意当用户仅键入一个字符时的极端情况 验证仍然应该发生 a ab abc ab a ab false validate