在swift中保存硬币变量3

时间:2016-10-30 21:15:41

标签: ios swift nsuserdefaults

我是swift的新手,我需要帮助保存一个int变量,该变量包含他们收集的用户硬币并在应用程序关闭后保存它,所以这就是我做的,我有两个场景一个代表startMenu,它有一个具有硬币变量的结构(所以我可以轻松地从另一个场景控制它),另一个场景是GameScene,而在每次用户与硬币节点交互时在GameScene中,它增加1到StarMenu场景中的硬币变量

这里是我在StartMenu的结构

    let defaults = UserDefaults.standard
    defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected")
    defaults.synchronize()

这就是我为保存它所做的工作

Variables.CoinsCollected += 1

当用户与硬币交互时,我在didSgin联系人的GameScene中有这一行

coinsCollectedLabel = SKLabelNode(text: "coins: \(Variables.CoinsCollected)")

我有这行更新硬币变量的标签名称

<child-of-second>

并且一切正常,但它没有得到保存,我知道我错过了一些东西,我尝试用同样的问题阅读很多人的问题,但它没有工作,所以,如果你们中的任何人能帮助我,我将非常感激

2 个答案:

答案 0 :(得分:1)

let defaults = UserDefaults.standard

...
//after Initializing Variables Instance

//get saved value
guard Variables.CoinsCollected = defaults.integer(forKey: "CoinsCollected") else {
    print("Previously saved coins don't exist")

    //create UserDefaults value for coins
    defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected")
}

我认为值得保存整个Variables对象,这样您就可以获得稍后添加到struct的新值 - 在这种情况下,您应该使用(Variables对象序列化(例如)

//set object
defaults.set(Variables, forKey: "Variables")
//read object
let variables: Variables = defaults.object(forKey: "Variables")

//theoretically you should now be able to get CoinsCollected value within your retrieved object~
//e.g.
print(variables.CoinsCollected)

答案 1 :(得分:1)

您可以在Variables课程中执行此操作,以便您的硬币始终保存在永久文件中:

class Variables {

    static let userDefaults = UserDefaults.standard

    struct Constants {
        static let CoinsCollectedKey = "CoinsCollected"
    }

    static var CoinsCollected: Int {
        get {
            return userDefaults.integer(forKey: self.Constants.CoinsCollectedKey)
        }

        set(value) {
            userDefaults.setValue(value, forKey: self.Constants.CoinsCollectedKey)
        }
    }
}