麻烦传递变量通过segue(Swift)
我有一个变量名为correctAnswers = 0
在我的程序的顶部,我有一个函数,每次它被称为它将correctAnswers
值加1。我测试了这个函数实际上是通过在每个+1之后打印这个变量来改变这个变量,并且确定它变为1,2,3,4等等。但是我有一个结束的屏幕,显示该程序后的结果(在这种情况下10)已达到其问题极限麻烦传递变量通过segue(Swift)
编辑#2:这里是我的赛格瑞功能准备
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我也尝试过将其通过赛格瑞的这个方法,它是总是零。它不工作的事实与变量在函数中被改变的事实有什么关系?这是我可以想到解释为什么没有任何工作的唯一原因。
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
}
}
你在你的EndScreen视图控制器的viewDidLoad方法创建GameScreen的新实例。您需要将GameScreen对象从您之前的视图控制器传递到此视图控制器。
在您的segue中,您正在设置EndScreen
视图控制器的correctAnswers
属性,但是您打印的值为gso?.correctAnswers
。一个新的gso
刚刚在此打印语句之前实例化,并且(我假设)具有默认值0,这就是为什么您打印出0的原因。
你要么需要通过SEGUE传递GameScreen
(假设你从GameScreen
segueing),像这样:
func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "EndScreenSegue") {
let secondViewController = segue.destination as! EndScreen
correctAnswers = sender as! Int
secondViewController.gso = self
}
}
或者,你可以通过SEGUE通过correctAnswers
为你做但一定要使用该值,而不是gso?.correctAnswers
class EndScreen: UIViewController{
var correctAnswers: Int?
override func viewDidLoad() {
super.viewDidLoad()
print(correctAnswers ?? 100)
}
}
好吧,我添加了你的代码,并且用gso = gameScreen()和没有尝试过。这两次都没有将值传递给新的视图控制器。 –
您正在创建GameScreen的新实例。
从viewDidLoad中
我这样做了,它只是提供了默认值而不是0. –
你可以分享GameScreen – OverD
的代码,它是一个非常非常长的文件,你在找什么?我可以告诉你,correctAnswers变量在顶部声明为0,然后我有一个函数,每次调用它时,它都会将+1添加到correctAnswers变量中。我还应该注意到,我不是在我已经添加到已经存在的变量中的函数内部重新声明变量。 –
删除此行gso = GameScreen()
出于某种原因,它看起来像prepareForSegue不再起作用,但是当你使用它的Xcode不给错误。正确的格式是现在:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EndScreenSegue"{
let secondViewController = segue.destination as! EndScreen
secondViewController.recievedAnswers = correctAnswers
}
}
'FUNC prepareForSegue(赛格瑞:UIStoryboardSegue!发信人:AnyObject){ 如果(segue.identifier == “EndScreenSegue”){ 让secondViewController = segue.destination作为! EndScreen correctAnswers =发件人为! Int secondViewController。'我做了这个,correctAnswers总是零 –