2017-08-15 68 views
0

我们使用prepareForSegue()方法将FirstViewController的数据发送到SecondViewController。 但是,这是override方法。这意味着FirstViewController类从UIViewController类继承此方法。prepareForSegue()方法

该方法在UIViewController类中的任务是什么?

为什么我们不要在override版本中调用super.prepareForResult()方法呢?

+4

[此方法的默认实现不执行任何操作(https://developer.apple.com/documentation/uikit/uiviewcontroller/16 21490-prepareforsegue)。 –

回答

1

从Apple文档

此方法的默认实现不执行任何操作。

这样就意味着超类实现什么都不做,也不需要覆盖诸如

super.prepareForReuse() 

方法其实这有点像模板方法模式。 “不要打电话给我们,我们会给你打电话”。 UIViewController类在需要时调用此方法,并且子类覆盖它并添加实现。

+0

谢谢你的解释:) – Goktug

-2

我曾经使用prepareForSegue,但后来我意识到这太麻烦了。而不是仅仅创建您的变量,你想直接在上面发送下方,你导入,像这样/:

import UIKit 

var myVariable = "Hello" 

class ViewController: UIViewController{... 

那么变量将访问任何视图控制器,而无需使用SEGUE。

因此,例如,在一个按钮动作(在同一视图控制器让我们说),我可能会说:

myVariable = "Goodbye" 

然后我可以进入我的其他视图控制器,并在viewDidLoad中或任何你想要访问变量,您可以编辑变量或做任何,例如:

viewDidLoad{ 
print(myVariable) 
// Goodbye 
} 
+2

这是可怕的建议。你不应该通过全局变量传递数据。 – idz

+0

@idz除了它是一个可行的解决方案。所以我不会称它为可怕的建议谢谢 –

+0

这个问题的主要问题是你向所有人展示你的变量。所以,每个人都可以访问并更改它。如果你设置了很多全局变量,调试它将会很糟糕,因为有很多情况下,有人可以改变一些全局变量而没人知道它。 – iamirzhan