2017-06-08 10 views
0

Alamofireを使って同期スレッドを使いたい。Swift:Alamofireに同期スレッドを使用するにはどうすればよいですか?

私は同期のためにこのコードのように使用しています。

let queue1 = DispatchQueue(label: "queue1") 
    let queue2 = DispatchQueue(label: "queue2") 
    queue1.async { 
     self.dataFromServer.getData() 
    } 
    queue2.async { 
     //check if success to get the data from server 
     while(!self.dataFromServer.resultData){} 

     DispatchQueue.main.async { 
      // do something on screen 
     } 
    } 

...

func getData() { 
     Alamofire.request(url).responseJSON { response in 
      if response.error == nil { 
      // get data 
      self.resultData = true 
      }else{ 
      // error 
      } 
     } 
    } 

は私が後Alamofireを使用してサーバからデータを取得する何かをしたいです。 これが正しいですか? これがうまくいかない場合は、同期について教えてください。 よろしくお願いいたします。

答えて

0

クロージャを使用して別の、おそらく良い方法があります。

// You don't need to create queue and it asynchronously, since Alamofire calls are async. 
// You can remove queue statement 
let queue1 = DispatchQueue(label: "queue1") 
queue1.async { 
    self.dataFromServer.getData(completionClosure: { (resultData) in 
     if resultData { 

     } 
     else { 

     } 
    }) 
} 

次に、関数では、クロージャを受け取り、それを成功または失敗のブール値で呼び出すパラメータがあります。

func getData(completionClosure: (Bool) -> Void) { 
    Alamofire.request(url).responseJSON { response in 
     if response.error == nil { 
      // get data 
      completionClosure(true) 
     } 
     else{ 
      completionClosure(false) 
     } 
    } 
} 
+0

ありがとう!あなたの助けは私のためにとても役に立ちます。 これはうまくいきます! – LoveCode

0

あなたがの成功事例の上でコールバックを取得するようにブロックを返すようにgetData()関数を変更します

dispatch_sync 

の代わりに、非同期呼び出しすることもできますし、最初のAPI

+0

ありがとうございました! しかし私のプロジェクトではdispatch_syncを呼び出すことはできません。 なぜこれが見えないのですか? – LoveCode

0

の成功ブロック内の他のAPIを呼び出すことができますAPI呼び出し

func getData(sucess:((Void) -> Void)?) { 
Alamofire.request(url).responseJSON { response in 
      if response.error == nil { 
      // get data 
      sucess!() 
      self.resultData = true 
      }else{ 
      // error 
      } 
     } 
} 

は、APIレスポンスがの成功事例のコールバックで受信した後、あなたがやってやりたいです10関数

+0

ありがとうございます。 – LoveCode

関連する問題