更改View Controller时保存变量

时间:2017-09-22 04:14:04

标签: swift

我正在创建一个应用程序,它会将分数保存到变量中,当您单击按钮时,它会将分数添加到分数并将其显示在标签上。我的问题是,我有3个视图控制器,每个连接到同一个类。为了转换到不同的视图控制器,我只是在故事板中创建了一个移动到另一个视图的按钮。我的麻烦是,当我转到这个新视图时,分数会重置,当我回到第一个视图时,分数会再次重置。我相信问题是每当我切换视图时,类重新运行代码,这是我将评分变量声明为零的地方。当我改变观看时,我怎么能拥有它,我的分数保持不变?最后一件事:我尝试循环打印命令告诉我我的分数,当我在第一个视图中添加分数时,它会按预期显示,但是当我切换视图并在第二个视图中添加分数时,它会打印我的第一个分数,然后我的第二个分数一遍又一遍。每次切换视图时,它都会打印以前所有分数以及当前分数的分数。

2 个答案:

答案 0 :(得分:0)

将值全局存储在App delegate

只需创建任何类似字符串的var变量,将int作为

var myScores = Int()

现在传递myScores中的值

源ViewController中的

将Appdelegate的对象设为如下

let appDelegate = UIApplication.shared.delegate as! AppDelegate

并将值传递为

appDelegate.myScores = your int value

现在可以在destinationController中访问该值

 let appDelegate = UIApplication.shared.delegate as! AppDelegate
let myOldScores : Int = appDelegate.myScores

答案 1 :(得分:0)

我认为最好的方法之一就是使用单例类

final class GameDetail {

    // MARK: Shared Instance

    static let shared = GameDetail()

    // Can't init is singleton
    private init() { }

    // MARK: Local Variable  
    var score : Int = 0

}

我知道,使用AppDelegate实例作为“全局”单例实例很有吸引力,但不要这样做。如果这是你需要的话,创建特定和单独的单身人士