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

我正在努力弄清楚如何做一个布尔保存到NSUserDefaults使用swift的if语句。 我相信我知道如何将布尔保存到NSUserDefaults,但在这方面的确认将不胜感激。 这是我想弄清楚如何使用迅速客观c代码。

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

这是我迄今在迅速…

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

我想我可能已经弄清楚了。 任何人都可以确认这是保存布尔到NSUserDefaults和使用if语句的正确方法。 这里是…

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

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

上面的代码只是检查键的值是否为真。

要么

 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") } 

在Swift 3.0中

  let defaults = UserDefaults.standard 

它会创build标准的默认文件,并在不存在的情况下对其进行configuration,如果不存在则将其打开。

 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纠正答案:-)

 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{ } 

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

}

要检查bool值而不是objectForKey,我们必须使用boolForKey 。 我发现,你接受的答案是错误的

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

Swift 3

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

 let defaults = UserDefaults.standard @IBOutlet weak var mySwitch: UISwitch! @IBAction func switchValueChanged(_ sender: Any) { self.defaults.set(mySwitch.isOn, forKey: "mySwitch") } 

然后显示交换机的保存状态…开启/closures:

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

所以真的是1行来设置开关的状态,1行来获取用户保存状态并正确设置开关!