如何在 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) ? [复制] 的相关文章

  • 无法转换“String!”类型的值预期参数类型错误

    我有一个公共职能 public func lastActivityFor userName String gt String 后来我想将其称为 OneLastActivity lastActivityFor username 但最后一行出现
  • 如何使用 Swift 将高分游戏保存在排行榜上?

    我使用 SpriteKit 和 Xcode 7 beta 制作了一个游戏 我尝试放置 GameCenter 和 Leaderboard 但问题是排行榜中的分数不会改变 它始终保持 0 游戏的高分不会保存在 Leaderboard 中 我不知
  • iOS WebView 空白

    我已使用 YouTube 的标准嵌入网址在我的 iOS 8 3 应用程序中嵌入了 YouTube 视频 sample http www youtube com embed HkAK9QRe4ds 它按预期工作 但看起来很奇怪 那个白色间隙
  • 在 Swift 中使用 UIActivityIndi​​catorView 和 UIWebView

    当 url 加载到 WebView 中时 我试图在我的应用程序中向用户显示活动指示器视图 我尝试过使用 Activity startAnimating activity stopAnimating 并尝试将它们放入函数等中 但没有任何运气
  • 使用Combine,如何在网络请求后取消分配订阅

    如果您使用组合来处理网络请求URLSession 那么你需要保存Subscription 又名 AnyCancellable 否则它会立即释放 从而取消网络请求 稍后 当网络响应被处理后 您想要取消分配订阅 因为保留它会浪费内存 下面是执行
  • IOS - 如何创建具有模糊背景的 Facebook 反应栏?

    虽然这周可能不会复制 Facebook 的某些设计 但我希望能够设计我自己的下面的反应指示器视图版本 我有三个UIImageViews 排列在与上面相同的位置 问题是 与 Facebook 不同 背景颜色可能会改变 即位于UIBlurEff
  • 在从初始化器返回 nil 之前,必须初始化类实例的所有存储属性

    尽管我不断收到上述消息 但我正在尝试在课堂上使用此代码 let filePath NSString let fileHandle NSFileHandle let totalFileLength CUnsignedLongLong init
  • 检查文件是否是别名 Swift

    如何在 Mac 上检查文件是否为别名 到目前为止 这是我的代码 public func getFiles let folderPath Users timeBro Desktop testfolder let fileManager NSF
  • 在 DecodingError 中采用 CustomNSError

    我正在使用 Crashlytics 编写一个错误记录器 并且遇到了一个问题 这个问题让我质疑我对协议和动态调度的理解 使用 Crashlytics 记录非致命错误时 API 需要一个符合错误的对象和一个可选的用户信息字典 我现在正在查看 J
  • 查询链接到 GeoFire 的 firebase 数据

    读完这些问题后 将 Geofire 位置与 Firebase 条目关联 https stackoverflow com questions 33885733 associate geofire location with firebase
  • Swift:使用元组在单个 switch-case 中使用多个间隔

    有这样的代码 switch indexPath section indexPath row case 0 1 5 println in range default println not at all 问题是我可以在第二个元组值中使用多个间
  • iOS 9.3.2 破坏 MPMusicPlayerController

    我正在尝试将 Apple Music 集成到我的应用程序中 直到今天早上我才设法使其完美运行 更新到 iOS 9 3 2 后 一切都不一样了 权限系统的工作原理相同 SK云服务控制器 https developer apple com li
  • 使用 OneSignal/Firebase 从 iOS 设备发送推送通知

    我正在开发一个应用程序 并试图找出当不同用户执行特定操作时如何通知特定用户 我试图避免设置自己的后端服务器 因为我相信我想做的事情可以通过 OneSignal Firebase 来完成 我还没有尝试过 但我认为每个用户都可以获得自己的 On
  • 如何从TableViewCell上的自定义CollectionViewCell推送VC?

    我有一个tableView和细胞 在细胞上我有一个collectionView并在其上显示一些内容 我想发送一个有关选择的链接indexPath 我想从自定义中推送 呈现我的视图CollectionViewCell这是在TableViewC
  • Swift try inside Objective-C 块

    我需要创建一个函数foo它接受一个抛出闭包作为参数 我可以使用 Swift 或 ObjC 来实现它 但我需要能够从两者中调用它 像这样 Swift func bar throws func foo block throws gt void
  • 如何使用逗号和行分隔符对字符串进行标记

    我正在 Swift 中制作一个简单的 String Tokenizer 就像在 Java 中一样 但这对我来说确实不起作用 我的数据源中每行的末尾用 分隔 数据用逗号分隔 例如 字符串 1 字符串 2 字符串 3 字符串 1 字符串 2 字
  • 上下文菜单未在 SwiftUI 中更新

    我正在尝试设置 SwiftUI contextMenu带有一个切换按钮Bool价值 上下文菜单的按钮文本应该在以下情况下更改 Bool切换 但上下文菜单不会更新 有没有办法强制更新上下文菜单 描述问题的示例代码 import SwiftUI
  • Swift 中计算只读属性与函数

    在 Swift WWDC 简介会话中 只读属性description被证明 class Vehicle var numberOfWheels 0 var description String return numberOfWheels wh
  • Swift 中通过可选绑定进行安全(边界检查)数组查找?

    如果我在 Swift 中有一个数组 并尝试访问超出范围的索引 则会出现一个不足为奇的运行时错误 var str Apple Banana Coconut str 0 Apple str 3 EXC BAD INSTRUCTION 但是 我会
  • 如何在 SwiftUI 中延迟动画?

    我想为两个文本字段设置动画 第二个字段有延迟 但它不起作用 没有延迟 它们同时从位置 100 动画到 0 这是代码 State private var offset CGFloat 100 State private var offset2

随机推荐

  • 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