Ios 检查UserDefault是否存在-Swift
我试图检查是否存在用户默认值,如下所示:Ios 检查UserDefault是否存在-Swift,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我试图检查是否存在用户默认值,如下所示: func userAlreadyExist() -> Bool { var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults() if userDefaults.objectForKey(kUSERID) { return true } return false } 然而,不管发生什么,即使对象还不存在,它也将
func userAlreadyExist() -> Bool {
var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey(kUSERID) {
return true
}
return false
}
然而,不管发生什么,即使对象还不存在,它也将始终返回true?这是检查存在性的正确方法吗?是的,这是检查
可选havenil
或任何值objectForKey
方法返回AnyObject?
的正确方法,它是隐式可选
因此,如果userDefaults.objectForKey(kUSERID)
的值大于其计算结果true
。如果userDefaults.objectForKey(kUSERID)
具有nil
值,则其计算结果为false
从swift编程
如果语句和强制展开
您可以使用if语句来确定可选项是否包含值。如果某个可选项确实有值,则其计算结果为
是的;如果它根本没有值,则计算结果为false
现在模拟器中有一个错误,在userDefaults
中设置key之后,无论你删除你的应用程序,它们总是保持设置。你需要重置模拟器
重置模拟器在userDefaults
中设置键之前检查此方法,或从userDefaults中删除键userDefaults。从userDefaults中删除objectforkey(kUSERID)
它将返回NO
。在设备上,它在iOS8 beta4
中解析,我复制/粘贴了您的代码,但Xcode 6.1.1向我抛出了一些错误,它最终看起来像这样,工作起来很有魅力。谢谢
func userAlreadyExist(kUsernameKey: String) -> Bool {
return NSUserDefaults.standardUserDefaults().objectForKey(kUsernameKey) != nil
}
Swift 5:
if UserDefaults.standard.object(forKey: "keyName") != nil {
//Key exists
}
阿斯顿有一个很好的答案。有关Swift 3版本,请参见下文
func isKeyPresentInUserDefaults(key: String) -> Bool {
return UserDefaults.standard.object(forKey: key) != nil
}
对于swift 3.2
func userAlreadyExist(kUsernameKey: String) -> Bool {
return UserDefaults.standard.object(forKey: kUsernameKey) != nil
}
检查值是否存储在UserDefault中的简单代码
let userdefaults = UserDefaults.standard
if let savedValue = userdefaults.string(forKey: "key"){
print("Here you will get saved value")
} else {
print("No value in Userdefault,Either you can save value here or perform other operation")
userdefaults.set("Here you can save value", forKey: "key")
}
这与其他答案中的建议基本相同,但更方便(Swift 3+):
用法:if UserDefaults.contains(kUSERID){…}
public class PreferencesUtils {
private init() {
}
public static func setBoolData(boolValue: Bool, dataName: String) {
UserDefaults.standard.set(boolValue, forKey: dataName)
}
public static func getBoolData(dataName: String)-> Bool{
let defaults = UserDefaults.standard
if(defaults.value(forKey: dataName) != nil) {
return defaults.value(forKey: dataName)! as! Bool
} else {
return false
}
}
public static func saveStringData(data: String, dataName: String){
let preferences = UserDefaults.standard
preferences.set(data, forKey: dataName)
let didSave = preferences.synchronize()
if !didSave {
debugPrint("Not saved yet")
}
}
public static func getSavedStringData(dataName: String)-> String{
let defaults = UserDefaults.standard
if(defaults.value(forKey: dataName) != nil){
return defaults.value(forKey: dataName) as! String
} else {
return ""
}
}
public static func saveIntData(data : Int, dataName: String){
let preferences = UserDefaults.standard
preferences.set(data, forKey: dataName)
let didSave = preferences.synchronize()
if !didSave {
debugPrint("Not saved yet")
}
}
public static func getSavedIntData(dataName: String) -> Int {
let defaults = UserDefaults.standard
if(defaults.value(forKey: dataName) != nil){
return defaults.value(forKey: dataName) as! Int
}else{
return 0
}
}
}
或者您可以尝试此库:重写func viewDidLoad()
{
super.viewDidLoad()
如果UserDefaults.standard.string(forKey:“CHARRY”)=“CHARRY”{
}
}
这里的许多解决方案都是有效的。不过,我认为他们解决了错误的问题
通常,这样的代码用于检查是否设置了一个值,以便可以使用另一个默认值:
如果iskeypresentinguserdefaults(键:“用户名”){
返回UserDefaults.standard.string(forKey:“用户名”)
}否则{
return“未设置用户名”
}
您不应该关心是否设置了关键点。在UserDefaults
中有一种更优雅的方法来设置默认值:
UserDefault.standard.register(默认值:[“用户名”:“未设置用户名”])
如果您在应用程序启动时运行此代码,则对UserDefaults.standard.string(forKey:“username”)
的后续调用将返回默认值“未设置用户名”
,如果尚未为键设置值。“objectForKey
方法返回AnyObject!
,这是隐式可选的”这是错误的,它返回AnyObject?
@LeoDabus Swift已经更改了很多次。谢谢,顺便说一句,我已经改变了这一点。截至2016年10月25日,文档中的行现在显示“您可以使用if语句通过将可选项与零进行比较来确定可选项是否包含值。您可以使用“等于”运算符(=)或“不等于”运算符(!=)执行此比较。”如果您尝试如果选择{}
,Xcode 7.3.1将显示编译错误,并建议您使用==nil或!=尼尔森成功了!但是您忘记了参数,所以我添加了它。然后,将函数设为静态是有意义的,因为您正在访问一个单例标准:static func contains(key:String)->Bool
。否则,使返回self.object(forKey:key)!=无
请不要只发布代码作为答案,还要解释代码的作用以及如何回答问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
public class PreferencesUtils {
private init() {
}
public static func setBoolData(boolValue: Bool, dataName: String) {
UserDefaults.standard.set(boolValue, forKey: dataName)
}
public static func getBoolData(dataName: String)-> Bool{
let defaults = UserDefaults.standard
if(defaults.value(forKey: dataName) != nil) {
return defaults.value(forKey: dataName)! as! Bool
} else {
return false
}
}
public static func saveStringData(data: String, dataName: String){
let preferences = UserDefaults.standard
preferences.set(data, forKey: dataName)
let didSave = preferences.synchronize()
if !didSave {
debugPrint("Not saved yet")
}
}
public static func getSavedStringData(dataName: String)-> String{
let defaults = UserDefaults.standard
if(defaults.value(forKey: dataName) != nil){
return defaults.value(forKey: dataName) as! String
} else {
return ""
}
}
public static func saveIntData(data : Int, dataName: String){
let preferences = UserDefaults.standard
preferences.set(data, forKey: dataName)
let didSave = preferences.synchronize()
if !didSave {
debugPrint("Not saved yet")
}
}
public static func getSavedIntData(dataName: String) -> Int {
let defaults = UserDefaults.standard
if(defaults.value(forKey: dataName) != nil){
return defaults.value(forKey: dataName) as! Int
}else{
return 0
}
}
}
func keyExists(key: String) -> Bool {
guard let _ = UserDefaults.standard.object(forKey: key) {
return false;
}
return true;
}
lb.text = "CHARRY"
im.image = UIImage(named: "CHARRY")
@IBAction func PressedCar(_ sender: UIButton){
lb.text = "CHARRY"
im.image = UIImage(named: "CHARRY")
UserDefaults.standard.set("CAR", forKey: "CHARRY")
}