需要帮助将bool保存到NSUserDefaults并在使用Swift的if语句中使用它

Emm*_*aro 12 xcode boolean nsuserdefaults ios swift

我正在努力弄清楚如何使用swift将一个bool保存到NSUserDefaults来执行if语句.我相信我知道如何将bool保存到NSUserDefaults,但是对此的确认将非常感激.这是我试图弄清楚如何使用swift的Objective-c代码.

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"onoroff"]) {
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"onoroff"];
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止迅速...

if  NSUserDefaults.standardUserDefaults().objectForKey("onoroff") != nil{
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
}
Run Code Online (Sandbox Code Playgroud)

我想我可能已经弄清楚了.任何人都可以确认这是将bool保存到NSUserDefaults并使用if语句的正确方法.这里是...

if  !NSUserDefaults.standardUserDefaults().boolForKey("onoroff"){
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
}else{ NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
     }
Run Code Online (Sandbox Code Playgroud)

V.J*_*.J. 9

if NSUserDefaults.standardUserDefaults().boolForKey("onoroff") == true
Run Code Online (Sandbox Code Playgroud)

以上代码仅检查密钥的值是否为真.

要么

if NSUserDefaults.standardUserDefaults().objectForKey("onoroff")
Run Code Online (Sandbox Code Playgroud)

如果密钥没有值,上面的代码检查密钥的值是否为真.(表示在"onoroff"的UserDefault中插入Nothing).

编辑

if !NSUserDefaults.standardUserDefaults().objectForKey("onoroff")
{
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
}
else
{
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
}
Run Code Online (Sandbox Code Playgroud)


Ash*_*k R 9

在Swift 3.0中

 let defaults = UserDefaults.standard
Run Code Online (Sandbox Code Playgroud)

它创建标准默认文件并在其不存在时进行配置,如果存在则将其打开.

if !UserDefaults.standard.bool(forKey: "onoroff") {
            UserDefaults.standard.set(true, forKey: "onoroff")
     } else {
            UserDefaults.standard.set(false, forKey: "onoroff")
     }
Run Code Online (Sandbox Code Playgroud)

if !defaults.standard.bool(forKey: "onoroff") {
            defaults.standard.set(true, forKey: "onoroff")
     } else {
            defaults.standard.set(false, forKey: "onoroff")
     }
Run Code Online (Sandbox Code Playgroud)

谢谢@Fred纠正答案:-)

  • 您创建了一个属性,但没有在答案中使用它?if !defaults.bool(forKey: "onoroff") { defaults.set(true, forKey: "onoroff") } else { defaults.set(false, forKey: "onoroff") } (2认同)

Jov*_*vic 5

接受的答案是正确的.这是我喜欢的方式(Swift 3.0):

struct Settings {

fileprivate struct Keys {
    static let soundKey = "soundKey"
}

static var sound: Bool {
    set {
        UserDefaults.standard.set(newValue, forKey: Keys.soundKey)
    }
    get {
        if UserDefaults.standard.object(forKey: Keys.soundKey) == nil {
            // Value for sound not yet set ... Setting default ...

            UserDefaults.standard.set(true, forKey: Keys.soundKey)
            return true
        }
        return UserDefaults.standard.bool(forKey: Keys.soundKey)
    }

}
Run Code Online (Sandbox Code Playgroud)

}