在重新加载场景之前,我的布尔用户默认值是不是保存了?

时间:2017-10-06 13:38:51

标签: swift sprite-kit

我有一个关键声音的用户默认值。单击声音按钮时,我可以在两者之间切换。在我离开现场之前,为什么不能节省价值?如果我单击我的设置按钮,它将显示为错误的值,但如果我转到另一个场景并返回它将显示正确的值。

很抱歉,如果这令人困惑,我们将不胜感激。

这是我的代码

这是我声明变量的地方:

    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)

    }
}

1 个答案:

答案 0 :(得分:1)

如果您只想取消默认值,可以使用前缀运算符“!”设置新值时。根本不需要使用条件。您可以使用三元运算符来组合图像名称。你还应该删除?设置纹理时的后缀:

let sound = !UserDefaults.standard.bool(forKey: "sound")
UserDefaults.standard.set(sound, forKey: "sound")
settingsSound.texture = SKTexture(imageNamed: "settingsSound" + (sound ? "On" : "Off") + "Button")