2015-12-11 63 views
-1

我需要寫在快捷功能,像這樣一個工作流程:一些異步進程

  1. 呼叫一個視圖控制器獲取數據
  2. 調用Web服務來執行計算
  3. 調用另一個Web服務來保存數據

這三個進程是異步的。

用戶調用此過程中,使用如下代碼:

Get_Calc_And_Save_Data(self, closure: {(error:NSError?) -> Void in 
      if error==nil { 
       print("OPERATION OK") 
      } else { 
       print("OPERATION ERROR: \(error)") 
      } 
     }) 

我應該怎麼寫的過程? 我應該使用GCD嗎?

+0

無法獲得有什麼問題... – AncAinu

+2

你好。閱讀「NSOperation」[Apple NSoperations](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperation_class/)。您應該創建三個操作並按照適當的順序設置依賴關係。 –

+0

沒關係,你可以(也不應該)使用任何方法,是否有任何具體問題? –

回答

1

您可以使用布爾沿着幾個完成處理程序,以檢查是否每個功能已經完成,像這樣:

func singleMethodToCall(completion:() ->()) { 
    var methodOneFinished = false 
    var methodTwoFinished = false 
    var methodThreeFinished = false 
    asyncMethodOne {() ->() in 
     methodOneFinished = true 
     if methodOneFinished && methodTwoFinished && methodThreeFinished { 
      completion() 
     } 
    } 

    asyncMethodTwo {() ->() in 
     methodTwoFinished = true 
     if methodOneFinished && methodTwoFinished && methodThreeFinished { 
      completion() 
     } 
    } 

    asyncMethodThree {() ->() in 
     methodThreeFinished = true 
     if methodOneFinished && methodTwoFinished && methodThreeFinished { 
      completion() 
     } 
    } 
} 


func asyncMethodOne(completion:() ->()) { 
    //Do Stuff 
    completion() 
} 

func asyncMethodTwo(completion:() ->()) { 
    //Do Stuff 
    completion() 
} 

func asyncMethodThree(completion:() ->()) { 
    //Do Stuff 
    completion() 
} 


singleMethodToCall {() ->() in 
    print("All three methods have finishsed") 
} 
+0

謝謝@ Swinny89! –