我很怀疑使用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
}
答案 0 :(得分:1)
默认情况下,假设您正在使用故事板,则应使用segues将数据传递到下一个视图控制器。
全局变量在您希望它在整个应用程序中共享时非常有用,您可以创建一个Singleton类来设置全局属性。
此外,要在视图控制器之间传回,您可以创建委托来实现它,您可能需要检查Passing data back from view controllers Xcode。
如果您不熟悉与代表的合作,您可能还想检查this answer。
答案 1 :(得分:1)
使用全局变量在VC之间传递数据不是一个好主意。全局变量是应该谨慎使用的东西。如果要将数据从视图控制器A传递到A所呈现的视图控制器B,请使用prepareForSegue
方法执行此操作。如果要将视图控制器B中的数据传递给显示B的视图控制器A,请使用委托模式。
全局变量不利于此目的,因为:
val
。您将一些数据从A传递到B.第一次A呈现B,数据成功通过。第二次,由于逻辑中的某些错误,未发送数据。这意味着B将接收您上次发送的数据,并且外部的一切看起来都可以。如果您传递prepareForSegue
中的数据,如果没有传递数据,VC B将无法获取数据。可能会发生unexpectedly found nil while unwrapping optional
错误。这使您很容易分辨出错误。