将 bool 保存到 NSUserDefaults 并使用 Swift 在 if 语句中使用它

Saving bool to NSUserDefaults and using it in a if statement using Swift

我正在努力弄清楚如何使用 Swift 将布尔值保存到 NSUserDefaults 来执行 if 语句。我相信我知道如何将 bool 保存到 NSUserDefaults,但对此的确认将不胜感激。这是 Objective-C 代码,我试图找出如何与 swift.

一起使用
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"onoroff"]) {
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"onoroff"];
}

这是我目前在 Swift...

if  NSUserDefaults.standardUserDefaults().objectForKey("onoroff") != nil{
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
}

我想我可能已经弄明白了。谁能确认这是将 bool 保存到 NSUserDefaults 并使用 if 语句的正确方法。这是:

if  !NSUserDefaults.standardUserDefaults().boolForKey("onoroff"){
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
}else{ NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
     }
if NSUserDefaults.standardUserDefaults().boolForKey("onoroff") == true

以上代码只是检查key的值是否为真。

if NSUserDefaults.standardUserDefaults().objectForKey("onoroff")

如果键没有值,上面的代码也会检查键的值是否为真。(意味着 "onoroff" 的 UserDefault 中没有插入任何内容)。

编辑

if !NSUserDefaults.standardUserDefaults().objectForKey("onoroff")
{
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
}
else
{
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
}
NSUserDefaults.standardUserDefaults().setObject(Bool(false), forKey:"onoroff")

var onoroff = NSUserDefaults.standardUserDefaults().objectForKey("onoroff") as Bool!

if (onoroff != nil && onoroff == false)
{

}

编辑:

NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")

if NSUserDefaults.standardUserDefaults().boolForKey("onoroff"){

}else{

}

To check bool value instead of objectForKey we must use boolForKey. I find that as a mistakes in the answer you accepted

       if (NSUserDefaults.standardUserDefaults().boolForKey("onoroff")){
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
        }else
        {
            NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
        }

在 Swift 3.0

 let defaults = UserDefaults.standard

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

if !UserDefaults.standard.bool(forKey: "onoroff") {
            UserDefaults.standard.set(true, forKey: "onoroff")
     } else {
            UserDefaults.standard.set(false, forKey: "onoroff")
     }

if !defaults.standard.bool(forKey: "onoroff") {
            defaults.standard.set(true, forKey: "onoroff")
     } else {
            defaults.standard.set(false, forKey: "onoroff")
     }

感谢@Fred 更正答案:-)

接受的答案是正确的。这是我喜欢的方式 (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)
    }

}

}

Swift 3

这是开关的代码,它将 true 或 false 保存到 UserDefaults。

let defaults = UserDefaults.standard
@IBOutlet weak var mySwitch: UISwitch!

@IBAction func switchValueChanged(_ sender: Any) {
    self.defaults.set(mySwitch.isOn, forKey: "mySwitch")
}

然后显示开关的保存状态...on/off:

override func viewDidLoad() {
    super.viewDidLoad() 
    mySwitch.isOn = self.defaults.bool(forKey: "mySwitch")
}

真的只有 1 行设置开关的状态,1 行获取用户保存的状态并正确设置开关!