我的程序顶部有一个名为correctAnswers = 0
的变量,我有一个函数,每次调用它时,它会在correctAnswers
值上加1。我测试过该函数实际上是通过在每+1后打印它来改变变量,并且确定它变为1,2,3,4等等。但是我有一个结束屏幕,显示程序达到问题限制后的结果(在这种情况下为10)
编辑#2:这是我准备segue功能
func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "EndScreenSegue") {
let secondViewController = segue.destination as! EndScreen
correctAnswers = sender as! Int
secondViewController.gso = self
}
}
这是我最终屏幕中的代码:
var gso: GameScreen?
override func viewDidLoad() {
super.viewDidLoad()
gso = GameScreen()
print(gso?.correctAnswers ?? 100)
}
当我打印正确的答案时,它仍为0。
编辑#3我也试过这种方法将它传递给一个segue,它总是为零。它不起作用的事实是否与变量在函数中被更改的事实有关?这就是我可能想到的唯一理由来解释为什么没有任何效果。
func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "EndScreenSegue") {
let secondViewController = segue.destination as! EndScreen
secondViewController.recievedAnswers = correctAnswers
}
}
class EndScreen: UIViewController{
var recievedAnswers: Int!
override func viewDidLoad() {
super.viewDidLoad()
print(recievedAnswers!)
}
}
编辑#4想出来了!我认为。 它似乎改变了prepareForSegue并且它不再有效,但是xcode没有给你一个错误?应该另外发一个帖子吗? 实际运作的代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EndScreenSegue"{
let secondViewController = segue.destination as! EndScreen
secondViewController.recievedAnswers = correctAnswers
}
}
答案 0 :(得分:1)
您在EndScreen视图控制器的viewDidLoad方法中创建了一个新的GameScreen实例。您需要将GameScreen对象从之前的视图控制器传递给此对象。
答案 1 :(得分:0)
在您的segue中,您需要设置correctAnswers
视图控制器的EndScreen
属性,但是您要重新打印gso?.correctAnswers
的值。刚刚在此打印语句之前实例化了一个新的gso
,并且(我假设)默认值为0,这就是您打印出来的原因。
您需要将GameScreen
传递给segue(假设您正在从GameScreen
发出信号),如下所示:
func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "EndScreenSegue") {
let secondViewController = segue.destination as! EndScreen
correctAnswers = sender as! Int
secondViewController.gso = self
}
}
或者你可以在你正在做的时候将correctAnswers
传递给segue,但一定要使用该值,而不是gso?.correctAnswers
class EndScreen: UIViewController{
var correctAnswers: Int?
override func viewDidLoad() {
super.viewDidLoad()
print(correctAnswers ?? 100)
}
}
答案 2 :(得分:0)
您正在创建GameScreen的新实例。
从viewDidLoad
中删除此行gso = GameScreen()
答案 3 :(得分:0)
由于某些原因,看起来prepareForSegue不再有效,但xcode在您使用它时不会出错。现在正确的格式是:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EndScreenSegue"{
let secondViewController = segue.destination as! EndScreen
secondViewController.recievedAnswers = correctAnswers
}
}