gpt4 book ai didi

ios - 使用 Bond 定期触发一个方法

转载 作者:行者123 更新时间:2023-11-28 06:24:56 24 4
gpt4 key购买 nike

我正在使用 ReactiveKit 的 Bond库在我的项目中第一次尝试掌握它。

在我的应用程序中,有一个 TextView 。当用户输入时,API 调用需要分三个阶段触发。

  1. 只要输入第一个字符。
  2. 之后每 8 秒一次。
  3. 最后一次是在用户输入最后一个字符后 10 秒后。

我正在尝试看看我是否可以完成此任务。

textView.reactive.text
.map { $0!.characters.count > 0 }
.throttle(seconds: 8)
.observeNext { _ in
print("-> Call API")
}

我也遇到了这个问题。即使我添加了字符数验证,只要执行此代码,Call API 就会打印到控制台。没有键盘甚至成为 TextView 的第一响应者。

以 8 秒间隔触发的方法工作正常。我再次找不到实现第三种情况的方法。

感谢任何帮助。

最佳答案

要解决第一个问题,您需要过滤空字符串,而不是将它们映射为 bool 值。

您的限制正确。每 8 秒间隔最多给您一个事件。

现在,要仅在 10 秒内没有跟随另一个事件时才触发事件,您需要使用 debounce 运算符。

最后,您将对这两个事件中的任何一个执行 API 调用,因此您必须合并信号才能接收这两个事件。

这是一个冗长的代码,不过你应该把它写得紧凑:)

let text = textView.reactive.text.ignoreNil()
let textEntered = text.filter { !$0.isEmpty }
let atMostOncePer8Seconds = textEntered.throttle(seconds: 8)
let on10SecondsAfterFinalEntry = textEntered.debounce(interval: 10)
let doTheCall = merge(atMostOncePer8Seconds, on10SecondsAfterFinalEntry)

doTheCall.observeNext { text in
print("-> Call API", text)
}

关于ios - 使用 Bond 定期触发一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com