将 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 行获取用户保存的状态并正确设置开关!
我正在努力弄清楚如何使用 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 行获取用户保存的状态并正确设置开关!