2017-06-14 10 views
-4

クロージャを使用してデータを渡す方法を知りたい。クロージャを使用して2つのViewController間でデータを渡す方法

  • デリゲート

  • 通知センター私は例とクロージャの適切な説明をしたい

  • 閉鎖:私は、データパスのアプローチの3種類があることを知っています。

  • +3

    あなたはすでに何を試してみましたか?いくつかのコードを提供してください。コード作成コミュニティではありません。ありがとう –

    +0

    私はあなたに以下のサンプルを提供しましたが、コードを要求すべきではありません。むしろあなたは試してみてください、そして、混乱/問題はここで分類されるべきです! – ankit

    +1

    私はこの質問が無効だと思います。構文については、ドキュメントページを参照してください。ブロックのドキュメントは次のURLにあります:https://stackoverflow.com/documentation/ios/6888/block#t=201706140953118422187 – Joshua

    答えて

    0

    ブロック/クロージャを使用したデータの受け渡しは、適切かつ合理的な方法であり、通知よりもはるかに優れています。 以下は同じコードです。 (データはまずVCに戻される)

    @IBAction func push(sender: UIButton) { 
         let v2Obj = storyboard?.instantiateViewControllerWithIdentifier("v2ViewController") as! v2ViewController 
    
         v2Obj.completionBlock = {(dataReturned) ->()in 
          //Data is returned **Do anything with it ** 
          print(dataReturned) 
         } 
         navigationController?.pushViewController(v2Obj, animated: true) 
    
        } 
    

    第二のViewController(あなたは第二のViewControllerのオブジェクトを作る)

    ファーストのViewControllerは

    import UIKit 
    typealias v2CB = (infoToReturn :String) ->() 
    class v2ViewController: UIViewController { 
         var completionBlock:v2CB? 
        override func viewDidLoad() { 
         super.viewDidLoad() 
        } 
    
        func returnFirstValue(sender: UIButton) { 
         guard let cb = completionBlock else {return} 
         cb(infoToReturn: returnFirstValue) 
        } 
    
    } 
    
    +0

    "これは何ですか?"のcompletionBlock = {(dataReturned) - >() –

    +0

    どこにデータが戻ってくるのですか? – ankit

    +0

    実際のデータを渡して私に説明できますか? - > cb(infoToReturn:returnFirstValue)データを使用して、2番目のVCの –

    0

    この例はの使用を説明しますサービスコールをAlamofireと連携させて、View Controllerを呼び出して応答を閉じて閉じます。

    サービスラッパークラスのコード:メソッド

    func doRequestFor(_ url : String, method: HTTPMethod, dicsParams : [String: Any]?, dicsHeaders : [String: String]?, completionHandler:@escaping CompletionHandler) { 
    
         if !NetworkReachablity().isNetwork() { 
          return 
         } 
    
         if (dicsParams != nil) {print(">>>>>>>>>>>>>Request info url: \(url) --: \(dicsParams!)")} 
         else {print(">>>>>>>>>>>>>Request info url: \(url)")} 
    
         Alamofire.request(url, method: method, parameters: dicsParams, encoding: 
          URLEncoding.default, headers: dicsHeaders) 
    
         .responseJSON { response in 
          self.handleResponse(response: response, completionHandler: completionHandler) 
         } 
        } 
    

    閉鎖宣言

    typealias CompletionHandler = (_ response: NSDictionary?, _ statusCode: Int?, _ error: NSError?) -> Void 
    

    閉鎖実装

    ビューコントローラを呼び出すことで、コード:

     ServiceWrapper().doRequestFor(url, method: .post, dicsParams: param, dicsHeaders: nil) { (dictResponse, statusCode, error) in 
    
         } 
    
    +0

    ブラザーはもう一度私の質問を読んだ。私はローカルデータを渡したいJSONデータフォーマットからではない –

    +0

    何が間違っているのですか?私が掲示した例では、Service Wraperクラスはクロージャを使用してコールビューコントロールにデータを渡します。私が間違っていれば私を修正してください。 – Jigaroza287

    +0

    @Sagarvaishnav、あなたの質問にローカルデータの兆候はなく、さらにあなたが望むデータを渡すことができます。私が投稿したものは単なる例であり、正確なドードは必要ありません。ありがとう。 – Jigaroza287

    関連する問題