从另一个ViewController访问变量

时间:2015-09-03 09:57:23

标签: ios xcode swift

在Swift中将变量从一个ViewController传递到另一个的最佳方法是什么?

我有一个名为DatePickerViewController.swift的ViewController,我在其中捕获用户使用UIDatePicker对象设置的日期。

然后我需要从另一个视图控制器访问日期变量。

这应该由passing data forward using Segue's完成还是我应该创建一个全局变量来从各种ViewControllers访问?

经过大量研究后,我无法想出这一点。对此最好的解释方法的解释将非常感激。

非常感谢。

3 个答案:

答案 0 :(得分:1)

嗯,这实际上取决于你的需求。如果您只需要将一个数据从视图控制器传递到另一个,您只需在目标视图控制器中定义一个属性,然后在执行segue之前将其设置在源视图控制器中(使用func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)方法)

另一方面,如果必须从多个视图控制器传递海量数据,则应考虑创建数据模型类并从中存储和检索所需的所有信息。

答案 1 :(得分:0)

您可以通过NSUserDefaults访问多个ViewControllers中的变量和数组。

将数据保存到NSUserDefaults:

在我们从NSUserDefaults读取或写入数据之前,我们必须首先获得对NSUserDefaults类的引用。

let prefs = NSUserDefaults.standardUserDefaults()

一旦我们将参考保存到常量,我们就可以向其写入数据。您将定义值和密钥名称以存储数据。

prefs.setValue("Berlin", forKey: "userCity")

从NSUserDefaults读取数据:

读取数据与编写数据类似。再次,让我们获取对NSUserDefaults类的引用,然后我们可以查询键的值。

let prefs = NSUserDefaults.standardUserDefaults()
if let city = prefs.stringForKey("userCity"){
println("The user has a city defined: " + city) 
}else{ 
prefs.setValue("Berlin", forKey: "userCity")  
}

答案 2 :(得分:0)

请参阅并使用项目中的以下代码

在FirstViewController中

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{
     if segue.identifier == "goNextPage"
     {
        var destinationVC = segue.destinationViewController as? SecondViewController

        destinationVC?.dataFromPreviousViewController = "Success"

     }
}
在SecondViewController中

var dataFromPreviousViewController = ""  

override func viewDidLoad() 

{
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    labelGetText.text = dataFromPreviousViewController

    println(labelGetText.text)

}

重要提示:首先,您必须将segue设置为显示,并在StoryboardSegue中将标识符名称设为 goNextPage (无论您想在此处提供什么)