2017-05-12 12 views
-2

私は共通クラスを使用してWebサービスの応答を取得しています。今度は、最初のView ControllerでWebサービスからの戻り値を割り当てたいと思います。しかし、問題は、迅速な共通クラスでWebサービスの応答を完了する前にView Controller内のコードを割り当てることです。したがって、配列は空の配列として返されます。誰かが迅速にサービスコールを完了するまで待つようにしてください。別のサービスを完了するまで関数の実行を待機する

ここは私のサンプルコードです。 Common.swiftクラス

static func getData() -> [returnArray] { 
     DispatchQueue.main.async(execute: { 
     // Request to get service data 
     // Servce response 
     let task = restObject.callObject.dataTask(with: requestObject, completionHandler: {data, response, error -> Void in 
      let object = getData(data) 
      if let values = object { 
       if values.count > 0 { 
        // Assign the values to global static array 
       } 
      } 
     }) 
     task.resume() 
     }) 
    // return the global static array 
} 

ビューコントローラクラス: インサイドdidLoad機能私は機能上の一般的なクラスを呼び出し、返された配列の値にアクセスしています。しかし、空の配列を返します。

+6

から取得することができますブロックに関する

func hitPostService(params:Dictionary<String,String>,unReachable:(() -> Void),handler:((Dictionary<String,AnyObject>?) -> Void)) { if networkReachable() { print_debug("Params:- \(params)") Alamofire.request(.POST, Constant.BASE_URL+params[Constant.kAPPEND_URL]!, parameters: params,encoding: .JSON) .responseJSON { response in switch response.result { case .Success: let result = response.result.value as? Dictionary<String,AnyObject> handler(result!) //call handler block for data case .Failure(let error): print_debug(error) handler(nil) //call handler block with nil } } } else { unReachable() //call unrechable block } } 

詳細については、いくつかの「コールバック」の一種または「完了ハンドラ」を介して、あなたのクラスを登録する必要があります。 – luk2302

+0

PromiseKitをご覧ください:https://github.com/mxcl/PromiseKit –

+2

関連コードを表示してください。 – shallowThought

答えて

2

ここで私はSWIFTブロックによってコールバックを取得し、それゆえ他のクラスから呼び出されたServiceClassを作成しています: - ServiceClassである) 1到達不能 2)ハンドラ

ServiceClass.instance().hitPostService(params, unReachable: { 
    print("Connection Error. Please check your internet connection and try again.") 
}) { (response) in 
    if response != nil { 
      print_debug(response) 
    } 
} 

他のコントローラ。あなたは*待ち*したくないhttp://fuckingswiftblocksyntax.com/

+0

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

+0

スウィフト2.2とalamofireとその仕事は良い。 –

+0

基本的に、あなたはブロックについて学ぶ必要がある。 –

関連する問題