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

Passing Data in Swift Between View Controllers in Same File

为什么我不能将数据从一个视图控制器 class 传递到另一个视图控制器 class,当它们在同一个 .swift 文件中时?

为了理解传递的数据,我已经完成了下面链接的两个教程,并且都让您为第二个视图控制器制作了另一个 .swift 文件。当我完全按照他们的要求行事时。当我做所有相同的事情但只是将 class SecondViewController 放在与 class FirstViewController 相同的 .swift 文件中时,它不起作用。为什么?

我正在构建一个包含三个视图控制器的应用程序,如果可以的话,我宁愿将所有代码保存在一个文件中。这是它不起作用的原因还是它只是形式不佳?

教程:

How to Pass Data from View Controller (Swift : Xcode) on YouTube

Segue Between Swift View Controllers on CodingExplorer

这个有效:

//  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. 您是否为您的视图正确设置了 classes?带有 textField 的视图(可能还有 ViewTwo 的按钮)应设置为 ViewController,带有标签的第二个视图应设置为 ViewTwo.

  2. 检查您的 label/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
    }
}