【问题标题】:Use closure to pass data between two controllers使用闭包在两个控制器之间传递数据
【发布时间】:2019-09-17 09:28:52
【问题描述】:

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

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

class FirstView: UITableViewController {

@IBOutlet weak var titleLabel: UILabel!

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

class SecondViewController: UIViewController {


@IBAction func pressChangeButton(_ sender: UIButton) {

}

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

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

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

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

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

【问题讨论】:

    标签: swift closures


    【解决方案1】:

    你可以试试

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

    【讨论】:

      【解决方案2】:

      闭包基本上是一段可以运行的代码。在 Swift 中,闭包是一等公民,因为它可以作为参数和函数的返回类型传递。话虽如此,您可以像通常对其他对象一样传递或设置闭包。

      根据 Sh_Kan 的回答,只需将SecondViewController 的闭包设置为prepare(for segue:sender:),始终特别注意retain cycles。您可能还想看看 delegate 设计模式,以便在控制器之间交换数据和消息。

      【讨论】:

        猜你喜欢
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 1970-01-01
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多