如何使用闭包在两个ViewController之间传递数据

Sag*_*nav 0 iphone closures ios swift swift3

我想知道如何使用闭包传递数据.我知道有三种类型的数据传递方法:

  • 代表

  • 通知中心

  • 关闭

我希望通过一个例子对闭包进行适当的澄清.

ank*_*kit 8

使用块/闭包传递数据是一种良好而合理的方法,并且比通知更好.下面是相同的代码.

第一个ViewController(你在那里制作第二个ViewController的对象)

 @IBAction func push(sender: UIButton) {
        let v2Obj = storyboard?.instantiateViewControllerWithIdentifier("v2ViewController") as! v2ViewController

        v2Obj.completionBlock = {[weak self] dataReturned in
            //Data is returned **Do anything with it **
            print(dataReturned)
        }
        navigationController?.pushViewController(v2Obj, animated: true)

    }
Run Code Online (Sandbox Code Playgroud)

第二个ViewController(数据传递回First 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)
    }

}
Run Code Online (Sandbox Code Playgroud)