无法将变量传递给第二个viewcontroller

时间:2015-06-17 21:26:26

标签: swift viewcontroller

我按下按钮时尝试为变量赋值,然后将其发送到第二个viewcontroller。

我无法将变量(int)从第一个viewcontroller(FirstViewController.swift)传递给我的第二个控件(ViewController.swift)。

我的切入点是FirstViewController.swift

这是我的FirstViewController.swift代码:

import UIKit

var language:Int = 0

class FirstViewController: UIViewController {

@IBAction func dutch(sender: AnyObject) {
    language = 1
    println(language)//check in console
}

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var soundsVC = segue.destinationViewController as! ViewController

    soundsVC.languageSelected = language
}

@IBAction func dutch在按下按钮时被激活,在此之后它应该将语言的值更改为1。

import UIKit
import AVFoundation

class ViewController: UIViewController {

var languageSelected:Int = 0

@IBAction func controleFunc(sender: AnyObject) {
    println(languageSelected)
    println(language)
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.jpg")!)
    // Do any additional setup after loading the view, typically from a nib.
    println(languageSelected)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



}

我的输出是:

0 //languageSelected
1 //language
0 //languageSelected if the controle function is activated (controleFunc)
1 //language if the controle function is activated (controleFunc)

我刚开始学习Swift,所以我不知道为什么languageSelected不会取得语言的价值。是因为我在ViewController.swift的顶部声明了languageSelected:Int = 0?我试图将其更改为languageSelected:Int = language,但不幸的是我得到了相同的结果。

谢谢! 塞泽尔

2 个答案:

答案 0 :(得分:1)

viewDidLoad()发生在prepareForSegue()之前,如果您想使用传入的状态,请覆盖设置器(如下所示)并对其执行某些操作,或者执行此操作在viewWillAppear()

var languageSelected:Int = 0 {
    didSet {
        print("The language is: \(languageSelected)")
    }
}

答案 1 :(得分:1)

我并不是100%确定你是如何设置所有东西的,但我认为你有相同的按钮既可以启动segue,也可以在按下时调用函数dutch()。我认为你不能保证在prepareForSegue()之前首先调用dutch(),但你的代码依赖于它们按顺序被调用。

我会删除dutch()(确保你也在故事板上断开它)并直接从prepareForSegue()传递值。如果你有一个按钮开始一个segue,你可以通过将sender参数转换为UIButton并检查其currentTitle属性来找出它启动了哪一个。或者,您可以根据自己的喜好检查segue标识符。

希望这有帮助!