我按下按钮时尝试为变量赋值,然后将其发送到第二个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,但不幸的是我得到了相同的结果。
谢谢! 塞泽尔
答案 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标识符。
希望这有帮助!