2014-09-25 74 views
0

我試圖寫一個使用Swift的HTTP請求,我真的只能看到人們以某種​​方式(實際上沒有那麼多GCD)在iOS上執行HTTP請求。Swift - Grand Central Dispatch vs Blocks/Closures

如果我想在iOS中發出HTTP請求,最好的方法是什麼:使用Grand Central Dispatch或者寫一些閉包塊?另外,我在哪裏可以找到一些很好的例子。從我在網上閱讀的內容來看,我很難看到一個人的好處。

目前,我有這樣的代碼:

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 

    dispatch_async(dispatch_get_global_queue(priority, 0), {()->() in 

     self.activityIndicator.startAnimating() 
     self.authenticateUser() 

     dispatch_async(dispatch_get_main_queue(), { 
      self.activityIndicator.stopAnimating() 
     }) 
    }) 

從我在調試會話標籤的處理器看,我可以看到它從主題X跳到主題Y(爲的authenticateUser)和回到線程X.哪個好 - 這是我想要的(我確定)。

在Swift中編寫的GCD或Blocks/Closures的任何很好的例子都是非常方便的。謝謝!

+3

GCD使用閉包。不能在不使用閉包的情況下在Swift中使用GCD。無論如何,你看過[* URL加載系統編程指南*](https://developer.apple.com/library/ios/Documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i)? – 2014-09-25 21:20:41

+0

看一看:https://medium.com/swift-programming/http-in-swift-693b3a7bf086。 – 2014-09-25 21:28:46

+0

@MaximShoustin比使用GCD或更正確的方式做異步HTTP請求更好嗎? – 2014-09-25 21:32:20

回答

1

您可以使用NSURLSession。基本用法就像

NSURLSession.sharedSession().dataTaskWithRequest(request) { data, urlResponse, error in 
    // handle the response 
}.resume() 
+0

這實際上在新線程中處理請求?如果是這樣,我是否將完成代碼放在您說'//處理響應'的大括號內? – 2014-09-25 21:26:37

+0

它異步發出http請求,然後在主線程上調用closure(處理響應部分)。 – mustafa 2014-09-25 21:29:50

+0

比我在上面的問題中使用GCD代碼更好嗎?如果是這樣,爲什麼? – 2014-09-25 21:33:19

2

使用NSURLSession發出您的HTTP請求。使用GCD在您的應用中實現併發(多個事件同時發生)。並使用Closures爲您的應用程序提供結構。正如你現在所看到的,它們都可以同時使用。順便提一下,請記住:所有UI修改都必須在主線程中調用,在您的代碼中,您在併發隊列中調用此self.activityIndicator.startAnimating()

相關問題