Swift,如何在其他功能中使用从VC返回的数据?

时间:2019-04-23 03:01:59

标签: swift delegates pass-data

我无法访问和使用从弹出窗口获得的变量value

第一次在这里问一个问题,这是编程的新手,所以请保持谦虚。我的程序有一个弹出窗口,显示一个供用户选择的日期,然后将该日期传递回主视图控制器。我对此方面进行了测试,以确保通过使用回调和委托使程序在标签中显示日期(我对这两种方法都进行了测试)来确保将数据显示回vc,并且它工作正常,但是我想要做的就是使用从弹出窗口中获取的值,将其放入变量中,并将其用于其他函数中的进一步计算。

我尝试进行更改,协议功能的返回值从最初的(value: String) -> ()(value: String) -> (String)

,但是然后意识到当我尝试从说我没有输入值的viewDidLoad函数访问该函数时,这是行不通的 就像我是在viewDidLoad内做的一样

    date = popupValueSelected(value: ???) // throws an error because it doesn't know about the delegate

这是我的委托协议代码:

    protocol PopupDelegate {
        func popupValueSelected(value:String)
    }

这是我的主视图控制器中用于从弹出窗口获取数据的代码,一切正常

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
            let popup = segue.destination as! DatePopupViewController 
            popup.delegate = self
    }

    func popupValueSelected(value: String) {
            date = value // how to access this value from somewhere else??
}

我要做的就是在另一个单独的函数中使用弹出窗口中的I值。如果无法返回该值,我该如何将其传递给其他地方?我在这里筛选了答案,看到有人问类似的问题,但是我看到的第一个答案是使用委托,但没有进一步的解释。我不想立即显示或使用该值,我只想将其用于其他计算,该计算将在用户单击其他按钮时显示。

很抱歉,如果这没有任何意义,因为我很难解释这个问题,因此,我提出了一个一次性的帐户,尽管我觉得有些事情太简单了,以至于我不见了。

我很高兴能收到所有反馈!

1 个答案:

答案 0 :(得分:1)

除非我想念的东西似乎占您90%的距离。您已经popupValueSelected获得了价值。如果将值存储在类级别变量中,则可以在以后使用它。如果我不太了解您的问题,请告诉我。