检查UserDefault是否存在 – Swift

我试图检查用户是否存在默认值,如下所示:

func userAlreadyExist() -> Bool { var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults() if userDefaults.objectForKey(kUSERID) { return true } return false } 

但是,即使对象不存在,也不pipe它会一直返回true吗? 这是检查存在的正确方法吗?

Astun有一个很好的答案。 请参阅下面的Swift 3版本。

 func isKeyPresentInUserDefaults(key: String) -> Bool { return UserDefaults.standard.object(forKey: key) != nil } 

我复制/粘贴你的代码,但Xcode 6.1.1是我的方式抛出一些错误,它看起来像这样,它的作品就像一个魅力。 谢谢!

 func userAlreadyExist(kUsernameKey: String) -> Bool { return NSUserDefaults.standardUserDefaults().objectForKey(kUsernameKey) != nil } 

是的,这是正确的方法来检查optional objectForKey或任何值objectForKey方法返回AnyObject? 这是Implicit optional

所以如果userDefaults.objectForKey(kUSERID)有任何值,它的计算结果为true 。 如果userDefaults.objectForKey(kUSERID)nil ,则其值为false

从迅速的编程指南

如果语句和强制解包您可以使用if语句来确定一个选项是否包含一个值。 如果一个可选项有一个值,则它的计算结果为true; 如果它没有任何价值,那么它的评价是错误的。

现在,在模拟器中有一个错误,而不是在userDefaults设置键后,无论你删除你的应用程序,它们总是保持设置。你需要重置模拟器。

重置您的模拟器检查此方法之前设置userDefaults中的键或从userDefaults删除关键userDefaults.removeObjectForKey(kUSERID) ,它将返回iOS8 beta4设备它在iOS8 beta4解决。

简单的代码来检查是否存储在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") } 

为迅速3.2

 func userAlreadyExist(kUsernameKey: String) -> Bool { return UserDefaults.standard.object(forKey: kUsernameKey) != nil }