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?
要在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)