在相同文件中的视图控制器之间传递Swift中的数据

为什么我不能将数据从一个视图控制器类传递到另一个视图控制器类,当他们在相同的.swift文件?

为了理解传递的数据,我已经完成了下面两个链接的教程,并且你们都为第二个视图控制器创build了另一个.swift文件。 当我跟着他们时,它确实有效。 当我做的一切都一样,但只是将class SecondViewController放在与FirstViewController class FirstViewController相同的.swift文件,它不起作用。 为什么?

我正在用三个视图控制器构build一个应用程序,如果可以,我宁愿把所有的代码保存在一个文件中。 这是为什么它不工作,或者它只是不好的forms?

教程:

如何从YouTube上的视图控制器(Swift:Xcode)传递数据

Sending之间的CodingExplorer上的Swift视图控制器

这工作:

 // ViewController.swift import UIKit class ViewController: UIViewController { @IBOutlet var TextField: UITextField! override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var DestViewController: ViewTwo = segue.destinationViewController as ViewTwo DestViewController.LabelText = TextField.text } } // ViewTwo.swift import UIKit class ViewTwo: UIViewController { @IBOutlet var Label: UILabel! var LabelText = String() override func viewDidLoad() { Label.text = LabelText } } 

这不:

 // ViewController.swift import UIKit class ViewController: UIViewController { @IBOutlet var TextField: UITextField! override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var DestViewController: ViewTwo = segue.destinationViewController as ViewTwo DestViewController.LabelText = TextField.text } } class ViewTwo: UIViewController { @IBOutlet var Label: UILabel! var LabelText = String() override func viewDidLoad() { Label.text = LabelText } } 

为我工作得很好。

  1. 你是否正确地设置了你的观点的类? 与您的textField视图(可能是一个buttonViewTwo )应该被设置为ViewController和您的第二个视图与标签应该被设置为ViewTwo

  2. 检查你的标签/ textField之间的连接。 他们是否正确地连接到你的class级?

  3. 这是我使用的代码,应该是完全一样的:

导入UIKit

 class ViewController: UIViewController { @IBOutlet var TextField: UITextField! override func viewDidLoad() { super.viewDidLoad() } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var DestViewController = segue.destinationViewController as! ViewTwo DestViewController.LabelText = TextField.text } } class ViewTwo: UIViewController { @IBOutlet var Label: UILabel! var LabelText = String() override func viewDidLoad() { Label.text = LabelText } }