我有一个关键声音的用户默认值。单击声音按钮时,我可以在两者之间切换。在我离开现场之前,为什么不能节省价值?如果我单击我的设置按钮,它将显示为错误的值,但如果我转到另一个场景并返回它将显示正确的值。
很抱歉,如果这令人困惑,我们将不胜感激。
这是我的代码
这是我声明变量的地方:
var sound = UserDefaults.standard.bool(forKey: "sound")
视图已加载:
let userDefaults = UserDefaults.standard
let appDefaults = ["sound" : true]
userDefaults.register(defaults: appDefaults)
触动开始
if node.name == "settingsSound" {
clicked()
if UserDefaults.standard.bool(forKey: "sound") == true {
UserDefaults.standard.set(false, forKey: "sound")
settingsSound.texture? = SKTexture(imageNamed: "settingsSoundOffButton")
}
else if UserDefaults.standard.bool(forKey: "sound") == false {
UserDefaults.standard.set(true, forKey: "sound")
settingsSound.texture? = SKTexture(imageNamed: "settingsSoundOnButton")
is
}
按下设置时调用的函数:
if sound == true {
settingsSound = SKSpriteNode(imageNamed: "settingsSoundOnButton")
}
else if sound == false {
settingsSound = SKSpriteNode(imageNamed: "settingsSoundOffButton")
}
这里是我点击播放声音的功能:
func clicked() {
if UserDefaults.standard.bool(forKey: "sound") == true {
run(backClick)
}
}
答案 0 :(得分:1)
如果您只想取消默认值,可以使用前缀运算符“!”设置新值时。根本不需要使用条件。您可以使用三元运算符来组合图像名称。你还应该删除?设置纹理时的后缀:
let sound = !UserDefaults.standard.bool(forKey: "sound")
UserDefaults.standard.set(sound, forKey: "sound")
settingsSound.texture = SKTexture(imageNamed: "settingsSound" + (sound ? "On" : "Off") + "Button")