クロージャを使用してデータを渡す方法を知りたい。クロージャを使用して2つのViewController間でデータを渡す方法
デリゲート
通知センター私は例とクロージャの適切な説明をしたい
閉鎖:私は、データパスのアプローチの3種類があることを知っています。
クロージャを使用してデータを渡す方法を知りたい。クロージャを使用して2つのViewController間でデータを渡す方法
デリゲート
通知センター私は例とクロージャの適切な説明をしたい
閉鎖:私は、データパスのアプローチの3種類があることを知っています。
ブロック/クロージャを使用したデータの受け渡しは、適切かつ合理的な方法であり、通知よりもはるかに優れています。 以下は同じコードです。 (データはまず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)
}
}
"これは何ですか?"のcompletionBlock = {(dataReturned) - >() –
どこにデータが戻ってくるのですか? – ankit
実際のデータを渡して私に説明できますか? - > cb(infoToReturn:returnFirstValue)データを使用して、2番目のVCの –
この例はの使用を説明しますサービスコールを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
}
ブラザーはもう一度私の質問を読んだ。私はローカルデータを渡したいJSONデータフォーマットからではない –
何が間違っているのですか?私が掲示した例では、Service Wraperクラスはクロージャを使用してコールビューコントロールにデータを渡します。私が間違っていれば私を修正してください。 – Jigaroza287
@Sagarvaishnav、あなたの質問にローカルデータの兆候はなく、さらにあなたが望むデータを渡すことができます。私が投稿したものは単なる例であり、正確なドードは必要ありません。ありがとう。 – Jigaroza287
あなたはすでに何を試してみましたか?いくつかのコードを提供してください。コード作成コミュニティではありません。ありがとう –
私はあなたに以下のサンプルを提供しましたが、コードを要求すべきではありません。むしろあなたは試してみてください、そして、混乱/問題はここで分類されるべきです! – ankit
私はこの質問が無効だと思います。構文については、ドキュメントページを参照してください。ブロックのドキュメントは次のURLにあります:https://stackoverflow.com/documentation/ios/6888/block#t=201706140953118422187 – Joshua