使用闭包在两个控制器之间传递数据

JOn*_*ney 1 closures swift

我的问题看起来很简单,但由于我是初学者,我无法理解在两个控制器之间传递数据的闭包的概念

例如,我有一个静态表视图控制器,其中有一个单元格和一个标题

class FirstView: UITableViewController {

@IBOutlet weak var titleLabel: UILabel!
Run Code Online (Sandbox Code Playgroud)

我有另一个视图控制器,其中包含一个按钮

class SecondViewController: UIViewController {


@IBAction func pressChangeButton(_ sender: UIButton) {

}
Run Code Online (Sandbox Code Playgroud)

这两个控制器之间有segue1,标识符为“segue1”

我想要一个简单的任务,我想添加一个boolean关闭,true如果按下更改按钮就会关闭。这就是为什么我为具有更改按钮的第二个视图控制器创建一个闭包函数。

var change : ((Bool) -> Void)?
Run Code Online (Sandbox Code Playgroud)

我只是想,第二个视图控制器告诉第一个视图控制器,更改关闭现在为真(按下更改按钮后),第一个视图控制器只需将其中的标题表更改为任何内容(我只是想看看它如何能够做完了)

我不知道我必须使用prepare sugue功能吗?谁能帮助我理解这个概念?

Sh_*_*han 5

你可以试试

class FirstView: UITableViewController {

    @IBOutlet weak var titleLabel: UILabel!

    @IBAction func goToSecond(_ sender: UIButton) {

        self.performSegue(withIdentifier: "segue1", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "segue1" {
            let des = segue.destination as! SecondViewController
            des.change = { [weak self] (value) in
                print(value)
                self?.titleLabel.text = "SetValue"// set a value
            }
        }
    }

}
class SecondViewController: UIViewController {

    var change : ((Bool) -> Void)?

    @IBAction func pressChangeButton(_ sender: UIButton) {

        change?(true)
    }

}
Run Code Online (Sandbox Code Playgroud)