【问题标题】:iOS Swift - How to reference a NSOperationQueue in an extension to cancel existing operations?iOS Swift - 如何在扩展中引用 NSOperationQueue 以取消现有操作?
【发布时间】:2023-04-04 12:18:01
【问题描述】:

我正在为 NSURL 创建一个扩展,它基本上验证 URL 是否存在并返回一个有效站点。

我在这个过程中使用 NSURLConnection.sendAsynchronousRequest(...) 来实际检查 http 标头响应,效果很好。

但是,就我而言,每次更新文本后,我都会在文本字段中检测提供的 URL,并希望通过取消任何现有的 NSURLConnection 请求来尝试提高性能。我认为这样做的唯一方法是创建一个“可引用的”NSOperationQueue,然后我可以调用“myOperationQueue.cancelAllOperations()”。

所以我的问题是,如何创建一个可引用的 NSOperationQueue,以便在每次调用此验证函数时调用适当的 'cancelAllOperations()',以便停止任何正在运行的操作?

同样,由于这是一个类扩展,我不能只为操作队列创建一个全局变量,并使用“self.myOperationQueue”来引用它。

【问题讨论】:

    标签: ios swift reference nsoperationqueue swift-extensions


    【解决方案1】:

    您可以将嵌套类型添加到NSURL,并使用静态变量来保存队列。这样,您将始终可以从扩展方法中访问相同的队列:

    extension NSURL {
        struct RequestQueue {
            static var queue = NSOperationQueue()
        }
    
        func checkURL() {
            println(RequestQueue.queue)
        }
    }
    
    let myURL = NSURL(string: "http://natecook.com/")!
    myURL.checkURL()
    // <NSOperationQueue: 0x7fe81b7022e0>{name = 'NSOperationQueue 0x7fe81b7022e0'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 2015-11-23
      • 2020-04-19
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多