2017-06-14 90 views
-4

我想知道如何使用閉包傳遞數據。我知道,有三種類型的數據傳遞方式:如何使用閉包在兩個ViewController之間傳遞數據

  • 代表

  • 通知中心

  • 關閉

我想關閉的適當澄清一個例子。

+3

你有什麼已經嘗試過?提供一些代碼。這不是代碼編寫社區。謝謝 –

+0

雖然我已經在下面給你提供了示例,但你不應該要求代碼。相反,你應該嘗試和任何混淆/問題應該在這裏解決! – ankit

+1

我認爲這個問題是無效的。有關語法,您可以訪問文檔頁面。塊文檔是在這裏:https://stackoverflow.com/documentation/ios/6888/block#t=201706140953118422187 – Joshua

回答

0

通過塊/關閉傳遞數據是一種很好且合理的方法,比通知要好得多。 下面是它的代碼。

第一視圖控制器(在您進行第二次的ViewController的對象)

@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) 

    } 

二視圖控制器(其中數據傳回第一個VC)

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) - >()in」這是什麼? –

+0

它在哪裏你得到的數據返回在變量dataReturned – ankit

+0

你可以解釋我通過任何實際數據? –

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類使用closure將數據傳遞給調用viewcontroller。如果我錯了,請糾正我。 – Jigaroza287

+0

@Sagarvaishnav,在你的問題中沒有本地數據的跡象,而且你可以傳遞你想要的任何數據,我發佈的只是一個例子,而不是你需要的確切節點。謝謝。 – Jigaroza287

相關問題