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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31070163/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 07:22:45  来源:igfitidea点击:

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

iosxcodeswiftbooleannsuserdefaults

提问by Emmanuel Amaro

I am struggling to figure out how to do an if statement with a bool saved to NSUserDefaults using Swift. I believe I know how to save the bool to NSUserDefaults but a confirmation in that would be greatly appreciated. This is the Objective-C code I am trying to figure out how to use with swift.

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

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

this is what I have so far in Swift...

这就是我目前在 Swift 中所拥有的......

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

I think I might have figure it out. Can anyone confirm this is the correct way to save a bool to NSUserDefaults and use a if statement with it. Here it is:

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

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

采纳答案by V.J.

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

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

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

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

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

EDIT

编辑

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

回答by Ashok R

In Swift 3.0

在 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 !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:-)

谢谢@Fred 更正答案:-)

回答by Jovan Stankovic

The accepted answer is correct. This is the way I like to do it (Swift 3.0):

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

}

}

}

回答by Pavan Jangid

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{

}

回答by Nischal Hada

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

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

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

回答by Mike

Swift 3

斯威夫特 3

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

这是开关的代码,它将真或假保存到 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!

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