通过另一个ViewController访问ViewController的变量

Ido*_*veh 0 null var uiviewcontroller ios swift

在我用Swift编写的iOS应用程序中,我有一个初始化的变量FirstViewController.swift.
我想将其值分配给标签SecondViewController.swift.

起初我试图这样做SecondViewController.swift:

var firstViewController: FirstViewController = FirstViewController(nibName: nil, bundle: nil)
var name = firstViewController.name
Run Code Online (Sandbox Code Playgroud)

在没有工作之后,我尝试使用struct:

// FirstViewController.swift
struct GlobalVariables {
    var name: String = "test"
}

// SecondViewController.swift
var name = FirstViewController.GlobalVariables.name
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.在两种方法之后,我将新变量打印到控制台并将其值分配给标签,但我看到的只是标签和nil控制台上没有任何内容.

你能帮帮我吗?我如何可以访问到一个变量上FirstViewController.swift通过SecondViewController.swift

Jac*_*cob 5

要在View Controllers之间传递参数,可以使用segues.

首先,你在FirstViewController中有变量

FirstViewController: UIViewController {
    var name: String = "test"
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后你在SecondViewController中有一个相同类型的变量

SecondViewController: UIViewController {
    var name: String = ""
    ...
}
Run Code Online (Sandbox Code Playgroud)

要从FirstViewController移动,您使用程序化segue.

self.performSegue(withIdentifier: "Indentifier", sender: nil)
Run Code Online (Sandbox Code Playgroud)

然后,在FirstViewController中,定义prepareForSegue:sender.您将获得对目标视图控制器的引用,然后将该变量设置为发送视图控制器的变量

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let vc = segue.destination as! SecondViewController
    vc.name = name
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您需要在所有视图控制器中访问它,请定义一个Global类.你在问题中说过你尝试了一个结构.相反,尝试静态变量

class Global {   
    static var name: String?
}
Run Code Online (Sandbox Code Playgroud)

编辑2:拥有全局变量的另一种方法是使用单例类

class Global {
     static let sharedInstance = Global()
     var name: String?
}
Run Code Online (Sandbox Code Playgroud)