在我用Swift编写的iOS应用程序中,我有一个在FirstViewController.swift
上初始化的变量
我想将其值分配给SecondViewController.swift
上的标签。
起初,我试图在SecondViewController.swift
上执行此操作:
var firstViewController: FirstViewController = FirstViewController(nibName: nil, bundle: nil)
var name = firstViewController.name
在没有工作之后,我尝试使用struct
:
// FirstViewController.swift
struct GlobalVariables {
var name: String = "test"
}
// SecondViewController.swift
var name = FirstViewController.GlobalVariables.name
但那也没有用。在这两种方法之后,我将新变量打印到控制台并将其值分配给标签,但我看到的只是标签上的任何内容和控制台上的nil
。
FirstViewController.swift
访问SecondViewController.swift
上的变量?
答案 0 :(得分:5)
要在View Controllers之间传递参数,可以使用segues。
首先,你在FirstViewController中有变量
FirstViewController: UIViewController {
var name: String = "test"
...
}
然后在SecondViewController中有一个相同类型的变量
SecondViewController: UIViewController {
var name: String = ""
...
}
要从FirstViewController移动,请使用程序化的segue。
self.performSegue(withIdentifier: "Indentifier", sender: nil)
然后,在FirstViewController中,定义prepareForSegue:sender。 您将获得对目标视图控制器的引用,然后将该变量设置为发送视图控制器的变量
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc = segue.destination as! SecondViewController
vc.name = name
}
编辑: 如果需要在所有视图控制器中访问它,请定义Global类。你在问题中说过你尝试了一个结构。相反,尝试静态变量
class Global {
static var name: String?
}
编辑2: 另一种拥有全局变量的方法是使用单例类
class Global {
static let sharedInstance = Global()
var name: String?
}
答案 1 :(得分:0)
这里有一个简单的想法,即如何使用单独的文件来保存要显示的标签的数据(值)。 免责声明:它可能不是最好的想法(你可能不想将你的ViewControllers绑定到这样的单个数据文件),但它应该在你学习其他更好的方法之前做到这一点。所以,我们走了。
您希望使用单独的文件(例如MyTextValuesModel.swift
命名)来表示您希望FirstViewController
和SecondViewController
访问的所有值。
您选择文件>新>从菜单中选择文件... ,然后选择 Swift文件。
然后你宣布你的class
:
import Foundation
class ValuesForLabels {
var textForLabel1 = "Label1"
var textForLabel2 = "Label2"
var textForLabel3 = "Label3"
// etc...
}
现在,在您的FirstViewController
和SecondViewController
中,您声明了一个变量来引用此类:
var textsForLabels = ValuesForLabels()
现在您可以从任何视图控制器访问(读/写)标签,如下所示:
textsForLabels.textForLabel1 = "NewLabel1Text"
// you've just set a new value for Label1
label1.text = textsForLabels.textForLabel1
// your label1 text is now set to textForLabel1
如果您想要从其他视图控制器访问标签值,请将新变量添加到新视图控制器以引用标签。