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



在我用 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.swiftSecondViewController.swift上的变量?

要在视图控制器之间传递参数,可以使用 segue。

首先,在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?
}

这是一个关于如何使用单独的文件来保存数据(值)以显示标签的准系统想法。免责声明:这可能不是最好的主意(您可能不想像这样将视图控制器绑定到这个单一数据文件),但它应该在您学习其他更好的方法之前解决问题。所以,我们开始了。

您希望对您希望FirstViewControllerSecondViewController访问的所有值使用单独的文件(例如将其命名为MyTextValuesModel.swift)。

从菜单中选择">文件>新建>文件...",然后选择">Swift 文件"。

然后你声明你的class

import Foundation
class ValuesForLabels {
var textForLabel1 = "Label1"
var textForLabel2 = "Label2"
var textForLabel3 = "Label3"
// etc...
}

现在,在您的FirstViewControllerSecondViewController中,您声明了一个变量来引用此类:

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

如果要从另一个视图控制器访问标签值,请向新视图控制器添加新变量以引用标签。

相关内容

  • 没有找到相关文章

最新更新