2014-11-14 48 views
2

我正在爲NSURL創建一個擴展,它基本驗證URL是否存在並返回有效的網站。iOS Swift - 如何在擴展中引用NSOperationQueue以取消現有操作?

我正在使用NSURLConnection.sendAsynchronousRequest(...)爲這個過程來實際檢查http標題響應,並且它工作得很好。

但是,在我的情況下,我在每次更新文本後檢測文本域中提供的URL,並希望通過取消任何現有NSURLConnection請求來嘗試提高性能。我認爲做到這一點的唯一方法是創建一個'可引用的'NSOperationQueue,然後我可以調用'myOperationQueue.cancelAllOpertions()'。

所以我的問題是,我如何創建一個可引用的NSOperationQueue,我可以在每次調用這個驗證函數時調用相應的'cancelAllOperations()',因此它會停止任何正在運行的操作?

同樣,由於這是一個類擴展,我不能只爲操作隊列創建一個全局變量,並使用'self.myOperationQueue'來引用它。

回答

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'} 
+0

似乎工作得很好。謝謝! – JimmyJammed 2014-11-16 23:47:11