如何消除方法调用的反跳?

2024-01-03

我正在尝试使用UISearchView查询谷歌地点。这样做时,在文本更改时需要我UISearchBar,我正在向 google 地点提出请求。问题是我宁愿将此调用反跳为每 250 毫秒仅请求一次,以避免不必要的网络流量。我不想自己编写这个功能,但如果需要的话我会编写。

我发现:https://gist.github.com/ShamylZakariya/54ee03228d955f458389 https://gist.github.com/ShamylZakariya/54ee03228d955f458389,但我不太确定如何使用它:

func debounce( delay:NSTimeInterval, #queue:dispatch_queue_t, action: (()->()) ) -> ()->() {

    var lastFireTime:dispatch_time_t = 0
    let dispatchDelay = Int64(delay * Double(NSEC_PER_SEC))

    return {
        lastFireTime = dispatch_time(DISPATCH_TIME_NOW,0)
        dispatch_after(
            dispatch_time(
                DISPATCH_TIME_NOW,
                dispatchDelay
            ),
            queue) {
                let now = dispatch_time(DISPATCH_TIME_NOW,0)
                let when = dispatch_time(lastFireTime, dispatchDelay)
                if now >= when {
                    action()
                }
            }
    }
}

这是我使用上面的代码尝试过的一件事:

let searchDebounceInterval: NSTimeInterval = NSTimeInterval(0.25)

func findPlaces() {
    // ...
}

func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) {
    debounce(
        searchDebounceInterval,
        dispatch_get_main_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT),
        self.findPlaces
    )
}

产生的错误是Cannot invoke function with an argument list of type '(NSTimeInterval, $T5, () -> ())

我该如何使用这个方法,或者在 iOS/Swift 中有更好的方法来做到这一点。


对于那些不想创建类/扩展的人来说,这是一个选项:

在你的代码中的某个地方:

var debounce_timer:Timer?

在你想要去抖的地方:

debounce_timer?.invalidate()
debounce_timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { _ in 
    print ("Debounce this...") 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何消除方法调用的反跳? 的相关文章

随机推荐

  • matplotlib 一次设置图中所有绘图的线宽

    import matplotlib pyplot as plt import numpy as np fig plt figure ax fig add subplot 111 ax plot range 10 ax plot 2 rang
  • Woocommerce-added_to_cart 触发器

    我正在尝试使用 WooCommerce added to cart 触发器在将特定产品添加到购物车时触发弹出窗口 到目前为止 我已经成功做到了以下几点 jQuery body on added to cart function alert
  • 使用Decodable进行JSON解析时,可选和decodeIfPresent有什么区别?

    我在用Codable第一次使用 Swift 4 的协议 我无法理解其使用decodeIfPresent from Decodable Decodes a value of the given type for the given key i
  • “在这台计算机上记住我” - 它应该如何工作?

    查看 Gmail 的 cookie 很容易看出 记住我 cookie 中存储的内容 用户名 一次性访问令牌 在用户名是秘密的情况下 它也可以以不同的方式实现 但无论如何 这件事的安全性不是很高 你偷了cookie 然后你就可以开始了 然而
  • C# 函数不更新参数

    这是一个基本的 C 应用程序 但我很生疏 我将首先向您展示我的代码 using System using System Data SqlClient using System Text namespace DatabaseAdder cla
  • pysmb 的示例

    您能给我一个使用 pysmb 库连接到某些 samba 服务器的示例吗 我读过有 smb SMBConnection SMBConnection 类 用户名 密码 my name remote name domain use ntlm v2
  • 使用表单对话框在编辑 url 中添加额外参数

    我使用 jqgrid 创建了一个网格 并使用表单对话框来添加 编辑和删除记录 but in Edit Record i want to pass the id of a record along with the url即使表单数据将包含该
  • .gitignore 不起作用 - 文件仍在跟踪中[重复]

    这个问题在这里已经有答案了 I ve a gitignore文件位于我的存储库的根目录中 这 gitignore文件具有以下模式来排除已编译的 Python 文件 并且这是文件中的唯一行 pyc 现在 当我在存储库的根目录中执行以下操作时
  • 无法覆盖 Spark 命令行上的 Typesafe 配置

    我有一个类型安全的配置application conf in the src main resources默认加载的文件夹 可以通过指定以下内容来覆盖单个值 conf spark driver extraJavaOptions DsomeV
  • imread 如何缩放 12 位图像?

    我有一个 12 位 pgm image 我用 imread 读取它 结果是一个 16 位图像 其值在 0 到 2 16 1 的整个范围内 Matlab 如何进行扩展 将要 X imread filename X uint16 double
  • 单击后打开非角度页面

    我正在尝试实现以下测试场景 单击页面上的徽标 断言打开了一个新的浏览器窗口 Chrome 中的选项卡 并检查当前 URL 问题是在新浏览器窗口中打开的页面是非角度页面当我执行点击的主页是角页 这是我的第一次尝试 it should show
  • 帮助使用 PHPExcel 库和表中的 mySQL 数据

    我有这个脚本 query SELECT id last name first name FROM users WHERE tmima id 6 result mysql query query while row mysql fetch a
  • 如何使用php的password_hash()方法..?

    我登录时发现密码不匹配 当用户注册时 我将密码保存为 password password hash this gt input gt post password PASSWORD BCRYPT 当用户登录时我会像这样检查密码 hash pa
  • 在谷歌地图全屏中时 select2 不起作用

    我有一个谷歌地图 用户可以进入全屏模式 我添加一个带有下拉列表的 div 作为地图的控件 并将 select2 插件应用到下拉列表 问题是当地图处于全屏模式时 select2 下拉列表不显示列表 当地图不处于全屏模式时 下拉列表可以正常工作
  • 带有 XML 数据源的表元素内的 Jasper 列表元素

    我正在尝试使用生成报告贾斯珀 iReport 设计器 5 6 0 表格的单元格内包含列表 生成的表可能如下所示 为此 我使用以下 XML 文件作为数据源
  • 如何使用参数在Data Studio中过滤Analytics数据?

    我正在使用我的 Analytics 数据在 Data Studio 中制作报告 但在找出如何过滤它时遇到了一些问题 这是我需要做的 我在 URL 中收到一个 用户 参数 我需要用它过滤我的 用户名 维度 我想在报告中创建某种过滤器 例如 I
  • 我可以在不使用 Cordova 的原生 Android 应用程序中使用聚合物/Web 组件吗?

    如果我没记错的话 由于加载本地文件引起的浏览器权限问题 您需要一个 Web 服务器来在计算机上使用 测试 Polymer 的 Web 组件 例如纸张元素 file s 一个简单的解决方案是导航到您想要尝试的聚合物文件所在的目录 然后键入py
  • 子列表上的递归函数返回 None

    我正在子列表上运行递归函数 一旦找到列表中的元素 check value 它就会验证 other value 是否是相应列表的第一项 并最终返回索引 但是当前代码返回 None 任何人都可以吗支持 因为我对子列表上的递归函数没有太多了解 d
  • 版本控制让我难住了

    我开发网站已经有几年了 一直没有时间和精力去了解版本控制 现在 当我开始开发一个更大的项目时 我正在考虑最终尝试一下 并以此为契机来了解版本控制 我已经阅读了一些简短的描述 但在掌握集中式版本控制与分散式版本控制的概念方面仍然遇到一些困难
  • 如何消除方法调用的反跳?

    我正在尝试使用UISearchView查询谷歌地点 这样做时 在文本更改时需要我UISearchBar 我正在向 google 地点提出请求 问题是我宁愿将此调用反跳为每 250 毫秒仅请求一次 以避免不必要的网络流量 我不想自己编写这个功