通过另一个vc解决方案传递值

时间:2017-11-19 10:41:46

标签: ios swift

我很怀疑使用prepare func

在值之间有什么不同
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "MainToTimer") {
        let vc = segue.destination as! YourViewController
        vc.var_name = "Your Data"
    }
}

或声明全局变量例如

VC1中的

var justsimpleint:Int! = 0 //out side class

viewdidload(){
 justsimpleint = justsimpleint + 2
}
VC2中的

viewdidload(){
print(justsimpleint)   // it will be 2
}

2 个答案:

答案 0 :(得分:1)

默认情况下,假设您正在使用故事板,则应使用segues将数据传递到下一个视图控制器。

全局变量在您希望它在整个应用程序中共享时非常有用,您可以创建一个Singleton类来设置全局属性。

此外,要在视图控制器之间传回,您可以创建委托来实现它,您可能需要检查Passing data back from view controllers Xcode

如果您不熟悉与代表的合作,您可能还想检查this answer

答案 1 :(得分:1)

使用全局变量在VC之间传递数据不是一个好主意。全局变量是应该谨慎使用的东西。如果要将数据从视图控制器A传递到A所呈现的视图控制器B,请使用prepareForSegue方法执行此操作。如果要将视图控制器B中的数据传递给显示B的视图控制器A,请使用委托模式。

全局变量不利于此目的,因为:

  • 可以从任何地方访问它们。这使您可以轻松地意外更改它们。
  • 发现错误更容易。假设您有VC A和B将使用的全局变量val。您将一些数据从A传递到B.第一次A呈现B,数据成功通过。第二次,由于逻辑中的某些错误,未发送数据。这意味着B将接收您上次发送的数据,并且外部的一切看起来都可以。如果您传递prepareForSegue中的数据,如果没有传递数据,VC B将无法获取数据。可能会发生unexpectedly found nil while unwrapping optional错误。这使您很容易分辨出错误。
  • 全局变量将保留对对象的引用,即使在需要它的VC被释放时也是如此。这意味着如果你没有正确清理VC,在VC被解散后会有一些无用的物体浮在内存中。