2

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

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

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

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

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

4

1 回答 1

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'}
于 2014-11-15T02:57:19.940 回答