如何在 Swift3 中取消 DispatchQueue.main.asyncAfter(deadline: time) ? [复制]

2023-12-25

描述:

我当前正在使用以下代码来查看用户是否已停止在搜索栏中输入内容。我想在每次用户立即开始输入后取消它0.5秒。

Code:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
    // your function here
}

问题:

我该如何取消DispatchQueue.main.asyncAfter如果用户开始再次输入Swift3 ?

我尝试过的:

我之前尝试过实施:

NSObject.cancelPreviousPerformRequests(withTarget: self)
self.perform(Selector(("searchForText:")), with: searchString, afterDelay: 0.5)

然而,延迟似乎无法正常工作。

更多代码:

//In class SearchViewController: UITableViewController, UISearchResultsUpdating
func updateSearchResults(for searchController: UISearchController) {
    let searchString: String = searchController.searchBar.text!

    //This is what I previously tried.. which doesn't work...
    //NSObject.cancelPreviousPerformRequests(withTarget: self)
    //self.perform(Selector(("searchForText:")), with: searchString, afterDelay: 0.5)

    //A struct with the first example code shown above.
    Utils.Dispatch.delay(secondsToDelay: 1){
        print("1 second has passed ! " + searchString)
    }
}

对于那些有时间测试代码的人,我将发布我当前未经测试的解决方案。当我有时间尝试时,我会编辑帖子。

private var operationQueue: OperationQueue!
private var mainAsyncQueue: DispatchQueue?


override func viewDidLoad() {
    print("ViewDidLoad of SearchViewController called")

    self.operationQueue = OperationQueue()
    self.currentTime = DispatchTime.now()

}
// MARK: UISearchResultsUpdating

func updateSearchResults(for searchController: UISearchController) {
    let searchStringRaw: String = searchController.searchBar.text!
    let searchString = searchStringRaw.trimmingCharacters(in: .whitespacesAndNewlines)
    guard searchString.characters.count > 0 else {
        return
    }

    print("Search string: \(searchString)")
    self.operationQueue.cancelAllOperations()
    //Put this in Utils.Dispatch.Delay
    self.mainAsyncQueue = DispatchQueue(label: "search.operation." + String(describing: DispatchTime.now()), qos: .default, attributes: DispatchQueue.Attributes.concurrent)

    let time = DispatchTime.now()
    self.currentTime = time

    self.mainAsyncQueue!.asyncAfter(deadline: time + 1){
        guard self.currentTime == time else {
            return
        }

        let tempOperation = BlockOperation(block:{

            if let nsurl: URL = Utils.Url.generate(Constants.Url.Search, options: "&p=1&n=20&q="+searchString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!){
                //Download data and handle response

            } else {
                print("Something went wrong...")
            }


        })
        self.operationQueue.addOperation(tempOperation)
    }

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

如何在 Swift3 中取消 DispatchQueue.main.asyncAfter(deadline: time) ? [复制] 的相关文章

随机推荐

  • ListField 中文本右侧的复选框

    我想要带有图像的列表字段和文本右侧的复选框 我在左侧获得了图像 但无法在右侧获得复选框 如果可能的话 复选框应该是不可见的 只能看到刻度线 我想实现 Image text1 chechbox Image text2 Image text3
  • 在meteor.com 上拥有一个子域

    如果我将我的应用程序发布到子域 例如 spartan meteor com 我是否拥有该子域 或者其他用户可以从我这里拿走它吗 如果我可以拥有它 是否有相关文档 您可以为您的应用程序设置部署密码 meteor deploy P sparta
  • 为什么这里不遵循运算符优先级? [复制]

    这个问题在这里已经有答案了 在此代码中 int y 10 int z y y 5 我所期望的 First y 5由于最内层括号的优先级 将被执行 所以值y将为 11 该表达式的值将为 15 然后 y 将被执行 所以 12 15 180 所以
  • Magento 自定义支付网关

    我正在尝试为 Magento 编写一个自定义支付网关 该模块在管理后端 系统 配置 付款方式 中被识别 但在前端到达 付款信息 时 没有出现选择该模块的选项 下面包含我创建的三个 XML 文件以及它们所在的目录 任何帮助将非常感激 谢谢 根
  • 在hibernate(springboot)中使用左连接和分页编写sql本机查询[重复]

    这个问题在这里已经有答案了 我正在使用 spring data JPA 我想在我的存储库中编写 SQL 查询 我有以下 SQL 查询 注意 LEFT JOIN SELECT FROM institution LEFT JOIN select
  • MySQL 查询运行两次

    我有一个 php 文件 其中包含 PHP 简单 HTML DOM 解析器 include simple html dom php 这种包容性使我mysql query query 在我的页面上执行两次 如果我删除包含内容 mysql que
  • 无法加载 x64 和 x86 的文件或程序集“CefSharp.Wpf”;只有一部作品

    当我跑步时我得到 Could not load file or assembly CefSharp Wpf Version 41 0 0 0 Culture neutral PublicKeyToken 40c4b6fc221f4138 o
  • 将 pandas DataFrame 中带逗号的数字字符串转换为 float

    我有一个 DataFrame 其中包含数字作为字符串 并用逗号表示千位标记 我需要将它们转换为浮点数 a 1 200 4 200 7 000 0 03 5 0 df pandas DataFrame a 我猜我需要使用 locale ato
  • 在 Swift 中从字典中获取值或键时保留循环

    当我从字典中获取值并将它们放入数组时 我无法再释放内存 我尝试从数组和字典中删除所有对象 但这些对象仍然存在于某处 未调用 deinit 我是按照以下方式玩的 class MyData let i 0 init NSLog Init dei
  • 检索关联数据时出错。仅限Linux

    在这个问题之前 我有另一个与同一主题相关的问题 感谢 ndm 问题已得到解决 链接上一个问题 Cakephp 3 Windows和Linux操作系统在查询数据库时返回不同的结果 https stackoverflow com questio
  • 我们应该如何使用 pad_sequences 在 keras 中填充文本序列?

    我已经编码了序列到序列 https stackoverflow com questions 41933958 how to code a sequence to sequence rnn in keras我自己使用从网络教程中获得的知识和我
  • 如何正确取消闹钟应用程序中 AlarmManager 设置的 AlarmClock 闹钟?

    这个问题已经有答案了here https stackoverflow com q 16999343 5993712 here https stackoverflow com q 20159649 5993712 and here https
  • FragmentPagerAdapter 的第二个片段中的访问受限

    我有两个类似的onViewCreated结构片段 1st Override public void onViewCreated NonNull View view Nullable Bundle savedInstanceState sup
  • 数据更新后 Flutter listview 不更新

    我在 BottomSheet 中有一个 ListView 它是使用元素数组构建的 目前我有一项 空 然后 clear 在异步数据库调用后编辑并填充 变量更新是正确的 我尝试使用setState 但 ListView 根本没有更新 我需要关闭
  • 从 Kubernetes 日志中提取行

    我是 kubernetes 的新手 并且仍在尝试从几行中提取日志并写入它 如果有人可以帮助我应该执行哪些命令 如果 pod 名为 bino 并且我想提取与错误无法访问网站相对应的行 然后将它们写入某个位置 例如 John Doe bino
  • 签名时发生错误:找不到 SignTool.exe

    当我尝试更新我正在制作的项目时 我第一次看到错误 签名时发生错误 找不到 SignTool exe 我以前从未见过这个 所以我查了一下 SignTool exe 是为 ClickOnce 部署签署我的项目的东西 我还读到它是 Windows
  • 远程设备面板发生了什么变化?

    我正在运行 Chrome 80 在准备移动调试时 我观察到以下情况 该面板已迁移到其自己的选项卡 并且其功能已更改 我检查了变更日志 https developers google com web updates 2020 01 devto
  • 什么是? python pyodbc 模块中的意思

    import pyodbc cursor execute INSERT INTO Testing Param Seed Number Cycle Name VALUES 0 CoupleIn 是什么意思 代码中的意思是 当我尝试替换 s 代
  • Windows 10(通用 Windows 应用程序)数据验证

    我试图弄清楚如何在UWP下进行数据验证 但根据我发现的情况 基本上还没有什么可以实现的 因此 我尝试实现我的自定义验证逻辑 我现在遇到的问题是 我在一个上显示错误信息TextBlock而不是直接在特定的TextBox其中包含数据错误 这就是
  • 如何在 Swift3 中取消 DispatchQueue.main.asyncAfter(deadline: time) ? [复制]

    这个问题在这里已经有答案了 描述 我当前正在使用以下代码来查看用户是否已停止在搜索栏中输入内容 我想在每次用户立即开始输入后取消它0 5秒 Code DispatchQueue main asyncAfter deadline now 0