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