在Swift中将变量从一个ViewController传递到另一个的最佳方法是什么?
我有一个名为DatePickerViewController.swift的ViewController,我在其中捕获用户使用UIDatePicker对象设置的日期。
然后我需要从另一个视图控制器访问日期变量。
这应该由passing data forward using Segue's完成还是我应该创建一个全局变量来从各种ViewControllers访问?
经过大量研究后,我无法想出这一点。对此最好的解释方法的解释将非常感激。
非常感谢。
答案 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 (无论您想在此处提供什么)