首页 > 解决方案 > 我们如何将闭包传递给应用流程中的任何 ViewController?

问题描述

在视图控制器 A 中,

var completionBlock: (((String) -> ()))? = nil

&我正在调用完成块,例如(ViewController A):

if let block = completionBlock {
     block("block data to pass") 
}

我不想将完成数据传递给 ViewController B,而是我想传递给 ViewController C,它是从 ViewController B 呈现的。

简而言之,我想将闭包数据从 ViewController A 传递到 ViewController CI 知道如何通过委托传递数据,只是对闭包感到好奇?

我们怎样才能做到这一点?

标签: iosclosuresswift4.2pass-data

解决方案


这只是我快速为您编写的示例代码,您可以根据需要修改对象。希望能解决您的问题。

import UIKit

class ViewControllerA: UIViewController {
    var block:(((String) -> ()))? = { input in
        print(input)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "A"
        let VCB = ViewControllerB()
        let VCC = ViewControllerC()
        VCC.block = block
        VCB.VCC = VCC
        self.navigationController?.pushViewController(VCB, animated: true)

    }


}

class ViewControllerB: UIViewController {
    var VCC:ViewControllerC?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .gray

    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if let VCC = VCC {
            self.present(VCC, animated: true, completion: nil)
        }
    }


}

class ViewControllerC: UIViewController {
    var block:(((String) -> ()))? = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .yellow
        //Will run the block that has been passed
        block?("test")
    }


}

推荐阅读