Ios 如何将变量从一个控制器访问到另一个控制器

Ios 如何将变量从一个控制器访问到另一个控制器,ios,swift,swift2,var,Ios,Swift,Swift2,Var,大家好,我正在使用swift 2.2开发一个应用程序。我在第一视图控制器中声明了一个变量,我想在第二视图控制器中访问该变量。我搜索了其他堆栈溢出答案,没有任何支持我的 在我的第一个视图控制器中: class firstViewController: UIViewController{ var timer:nstimer? //performed some functions using nstimer } 现在我想停止计时器,并在第二个视图控制器中保留按钮操作,以便访问变量计时器。如何访问

大家好,我正在使用swift 2.2开发一个应用程序。我在第一视图控制器中声明了一个变量,我想在第二视图控制器中访问该变量。我搜索了其他堆栈溢出答案,没有任何支持我的

在我的第一个视图控制器中:

class firstViewController: UIViewController{

var timer:nstimer?
//performed some functions using nstimer
}
现在我想停止计时器,并在第二个视图控制器中保留按钮操作,以便访问变量计时器。如何访问

我在堆栈溢出之前搜索了请求使用prepare for segue的答案,但我已经获得了一些连接,并执行了到其他控制器的segue

现在我正在寻找访问这些变量的解决方案。有人能帮我解决这个问题吗


提前感谢。

FirstController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "segueidentifier" {

     if let destVc = segue.destinationViewController as? SecondViewController {
      destVc.timer = self.timer
    }
 }
}
SecondViewController
中创建计时器属性并使用它

var timer: NSTimer?
如果您在连接方面遇到问题。试试这个

通过按住ctrl键并拖动在FirstViewController和SecondViewController之间创建segue,然后连接到second并为segue标识符命名


您的第二个视图控制器不应该知道第一个视图控制器的任何信息,如果它知道,那么您基本上将两个VC绑定在一起

相反,您需要做的是像上面建议的@Sahil那样传递引用(尽管我会避免这样做,因为第一个VC可能不会期望来自外部源的更改),或者使用委托模式

使用委托模式,您为第二个VC提供对第一个VC的弱引用,并使第一个VC符合第二个VC定义的协议。委托模式已经被解释了很多次,因此我只给您一个链接,而不是在这里再次解释:


委托模式是最安全的选项,它允许第一个VC以预期的方式控制计时器,而不是在外部对其进行修改,因此,我建议探索该选项,而不是将引用传递给计时器。

使用情节提要标识符并准备segue将给项目带来任何问题??因为我使用了许多视图控制器,并且在视图控制器之间使用了许多segue No!这不会产生任何问题。在PrepareForegue中,您可以检查标识符名称。但请记住,两个标识符名称不应相同。无需从第二个ctrlr访问计时器变量。设置一个委托,第一个ctrlr中的实现停止计时器。因此,从第二个ctrlr调用delegate.stopTimer()。顺便说一句,如果segue.identifier==“segueinidentifier”,最好移动Swift 3if segue.identifier==“segueinidentifier”。这里是我必须给出的标识符。?你需要点击segue并在右边给出标识符名称,没有像segue这样的选项。只有show和custom…可以使用故事板id吗?检查我更新的答案。关于@antonyraja的更多信息,我发布的链接中有一个例子。它从整体上解释了委托的概念,这样您就可以了解发生了什么。