Swift 按下按钮时,如何在NSDefault中保存布尔值?
我编写了一个昼夜按钮主题。如果用户按下日期按钮,Swift 按下按钮时,如何在NSDefault中保存布尔值?,swift,sprite-kit,Swift,Sprite Kit,我编写了一个昼夜按钮主题。如果用户按下日期按钮,GlobalData.DayBool=true,和GlobalData.NightBool=false。当他们按下夜间按钮时,GlobalData.DayBool=false和GlobalData.NightBool=true。背景变为夜间或白色,取决于哪个是真的,哪个是假的 假设用户单击了夜间按钮GlobalData.NightBool=true和GlobalData.DayBool=false,背景变为黑色 我希望根据他们按下的按钮保存布尔值,
GlobalData.DayBool=true
,和GlobalData.NightBool=false
。当他们按下夜间按钮时,GlobalData.DayBool=false
和GlobalData.NightBool=true
。背景变为夜间或白色,取决于哪个是真的,哪个是假的
假设用户单击了夜间按钮GlobalData.NightBool=true
和GlobalData.DayBool=false
,背景变为黑色
我希望根据他们按下的按钮保存布尔值,这样当他们关闭应用程序时,他们的背景将与他们选择的相同
//Day Button Pressed
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if dayButton.containsPoint(location) {
for touch: AnyObject in touches {
_ = touch.locationInNode(self)
backgroundColor = GlobalData.dayColor
GlobalData.nightBool = false
GlobalData.dayBool = true
}
}
}
//Night Button Pressed
for touch: AnyObject in touches
let location = touch.locationInNode(self)
if nightButton.containsPoint(location) {
for touch: AnyObject in touches {
_ = touch.locationInNode(self)
backgroundColor = GlobalData.nightColor
GlobalData.nightBool = true
GlobalData.dayBool = false
}
}
}
下面是我的代码,用于根据其中一个是真是假切换背景:
//Day Background
if GlobalData.dayBool == true && GlobalData.nightBool == false {
backgroundColor = GlobalData.dayColor
}
//Night Background
if GlobalData.nightBool == true && GlobalData.dayBool == false {
backgroundColor = GlobalData.nightColor
}
如果您有任何问题,请在下面留下。我真的需要这方面的帮助。为您的按钮创建一个
iAction
,然后执行下面的NSUserDefault部分
我总是喜欢将NSUserDeafult注册为默认设置,很多人只是继续第二步而没有注册
在AppDelgate.swift中注册NSUserDefault
NSUserDefaults.standardUserDefaults().registerDefaults(["valueName": AnyObject])
将值设置为您的NSUserDefault,这取决于您存储的数据类型,如果您确实注册了,则应与您的注册匹配。(下面是布尔数据类型的示例)
确保将值设置为NSUserDefault后同步,这样它将立即更新,否则它将在有机会时更新
NSUserDefaults.standardUserDefaults().synchronize()
接收值:这将接收布尔值,因为我们设置了布尔值和注册布尔值
let Variable: Bool! = NSUserDefaults.standardUserDefaults().boolForKey("valueName")
在AppDelegate/
ApplicationIDFinishLaunching
中注册键/值对,假设默认情况下day
为true
,而night
为false
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["day" : true, "night" : false]
defaults.registerDefaults(defaultValues)
然后在需要的任何地方读取值(但始终在注册后):
考虑到根本没有选择
将值保存到您喜欢的任何位置(最好是在应用程序willterminate中)
:
同步
行可以省略
由于白天
似乎总是与夜间
相反,一个默认键可能就足够了。Swift 5的更新:
UserDefaults.standard.set(self?.email, forKey: "email")
UserDefaults.standard.set(self?.password, forKey: "password")
UserDefaults.standard.set(true, forKey: "alreadysignedup")
取回
if (UserDefaults.standard.bool(forKey: "alreadysignedup")){
if let email1 = UserDefaults.standard.string(forKey: "email") {
self.emaildefault = email1
if let password1 = UserDefaults.standard.string(forKey: "password") {
self.passworddefault = password1
signIn()
}
}
}
我知道您不应该将用户敏感数据存储在UserDefaults中(使用Keychain),但这只是一个示例。因此,我必须为GlobalData.nightBool和GlobalData.dayBoolAnd创建一个变量,如果您想要或单独使用它,我应该为ValueName添加什么,因为您想检查它以查看值并相应地更改背景,对吗?对于
valueName
任何与您所做的和您想要接收的内容相匹配的内容。@Lucho:valueForKey
是不合适的。改用指定的方法boolforky:/setBool:forKey:
。Swift bridgesBool
到NSNumber
自动连接到ICE one,您还可以使用GlobalData.dayBool
作为布尔值。很好,瓦迪安。我会投票的:)@FarhadNežad你现在没有时间帮我做一些与此相关的事情,是吗?
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setBool(GlobalData.dayBool, forKey("day")
defaults.setBool(GlobalData.nightBool, forKey("night")
defaults.synchronize()
UserDefaults.standard.set(self?.email, forKey: "email")
UserDefaults.standard.set(self?.password, forKey: "password")
UserDefaults.standard.set(true, forKey: "alreadysignedup")
if (UserDefaults.standard.bool(forKey: "alreadysignedup")){
if let email1 = UserDefaults.standard.string(forKey: "email") {
self.emaildefault = email1
if let password1 = UserDefaults.standard.string(forKey: "password") {
self.passworddefault = password1
signIn()
}
}
}