将一个variables从一个视图控制器传递给另一个视图控制器

我新来的迅速语言,知道这个问题是重复的。我发现了几个类似的问题和答案,但我无法找出问题。

我想将scanStringvariables的值从ScanViewController传递给ResultViewController。

ScanViewcontroller如下:

import UIkit class ScanViewController: UIViewController { var detectionString : String! override func viewDidLoad() { super.viewDidLoad() detectionString = “SomeDetectedString” } override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) { if (segue.identifier == "MySegue") { var svc = segue.destinationViewController as ResultViewController; svc.detectedString = detectionString } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

ResultViewController如下所示:

 import UIkit class ResultViewController: UIViewController { var detectedString: String! override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor=UIColor.whiteColor() println(detectedString) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

println(detectedString)给我没有结果。 问题是如何从ScanViewController获取variables?

这可能听起来很奇怪,但是你的代码没有问题,但是它不能工作。 我用同样的代码,它忽略了赛格。 然后,我将ScanViewControllerembedded到故事板中的导航控制器中。 我还在ScanViewController viewDidLoad调用了self.performSegueWithIdentifier("MySegue", sender: self)来启动segue。 那么一切都像一个魅力。 你的prepareForSegue很好。 Yuvrajsinh的build议是好的,但不是必要的(我更改DetailVC到ResultViewController后,我试过了)。 没有导航控制器没有任何工作。 segue.identifier是一个string,它将工作在一个直的Swiftstring比较。

以下是ScanViewController的代码:

 import UIkit class ScanViewController: UIViewController { var detectionString : String! override func viewDidLoad() { super.viewDidLoad() detectionString = "SomeDetectedString" println(detectionString) self.performSegueWithIdentifier("MySegue", sender: self) } override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) { if (segue.identifier == "MySegue" || segue.identifier == "SegueFromButton") { println("prepareForSegue") var svc = segue.destinationViewController as ResultViewController; svc.detectedString = detectionString println("svc.detectedString: \(svc.detectedString)") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

和ResultViewController:

 import UIkit class ResultViewController: UIViewController { var detectedString: String! override func viewDidLoad() { println("Result Load View") super.viewDidLoad() self.view.backgroundColor=UIColor.whiteColor() println("detectedString in Result: \(detectedString)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

你的segue.identifier == "MySegue"是一些如何不应该比较的方式。

用下面的函数replace你的代码,你就完成了。

 override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) { let segueName: String = segue.identifier!; if (segueName == "MySegue") { var svc = segue.destinationViewController as DetailVC; svc.detectedString = detectionString } } 

有三种select给你:

  1. 使用prepareForSegue方法来获取目标ViewController并设置属性
  2. build立两个ViewController之间的委托关系进行通信
  3. 用NSNotificationCenter设置Observer