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

好久不见. 提交于 2019-12-04 02:13:23
V.J.
if NSUserDefaults.standardUserDefaults().boolForKey("onoroff") == true

The above code is only check wheather the value of the key is true or not.

or

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

The above code check wheather the value of the key is true or not as well if there is no value for the key.(Means Nothing inserted in the UserDefault of "onoroff").

EDIT

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

In Swift 3.0

 let defaults = UserDefaults.standard

It creates the standard defaults file and configures it if it does not exist, or open it if it does.

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

Thanks you @Fred for correcting the answer:-)

The accepted answer is correct. This is the way I like to do it (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)
    }

}

}

NSUserDefaults.standardUserDefaults().setObject(Bool(false), forKey:"onoroff")

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

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

}

EDIT:

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

This is code for the switch, that will save true or false to UserDefaults.

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

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

Then to show the switch's saved state... on/off:

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

So really 1 line to set the switch's state, and 1 line to get the users saved state and set the switch properly!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!