Rya*_*yan 72 nsuserdefaults ios swift
我正在尝试检查用户默认是否存在,如下所示:
func userAlreadyExist() -> Bool {
var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey(kUSERID) {
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
但是,即使对象不存在,它也总是会返回真实的东西吗?这是检查存在的正确方法吗?
小智 104
阿斯顿有一个很好的答案.请参阅下面的Swift 3版本.
func isKeyPresentInUserDefaults(key: String) -> Bool {
return UserDefaults.standard.object(forKey: key) != nil
}
Run Code Online (Sandbox Code Playgroud)
小智 29
我复制/粘贴你的代码,但Xcode 6.1.1在我的方式上抛出一些错误,它最终看起来像这样,它就像一个魅力.谢谢!
func userAlreadyExist(kUsernameKey: String) -> Bool {
return NSUserDefaults.standardUserDefaults().objectForKey(kUsernameKey) != nil
}
Run Code Online (Sandbox Code Playgroud)
cod*_*ter 21
是的,这是检查的正确方法optional有nil或任意数值objectForKey方法的返回值AnyObject?是Implicit optional.
所以如果userDefaults.objectForKey(kUSERID)有任何价值而不是它的评价true.如果userDefaults.objectForKey(kUSERID)有nil值比它的计算结果false.
来自swift编程指南
如果语句和强制解包 您可以使用if语句来确定可选项是否包含值.如果可选项具有值,则计算结果为true; 如果它根本没有值,则计算结果为false.
现在模拟器中存在一个错误,而不是在设置键之后userDefaults它们总是保持设置,无论你删除你的应用程序.你需要重置模拟器.
重置您的模拟器检查此方法,然后设置键入userDefaults或userDefaults.removeObjectForKey(kUSERID)从中删除键userDefaults
,它将返回NO.在解析的设备中iOS8 beta4.
Sir*_*lot 10
这与其他答案中的建议基本相同,但是以更方便的方式(Swift 3+):
extension UserDefaults {
func contains(key: String) -> Bool {
return UserDefaults.standard.object(forKey: key) != nil
}
}
Run Code Online (Sandbox Code Playgroud)
这里的许多解决方案都是有效的。不过,我认为他们解决了错误的问题。
通常,这样的代码用于检查是否设置了某个值,以便可以使用另一个默认值:
if isKeyPresentInUserDefaults(key: "username") {
return UserDefaults.standard.string(forKey: "username")
} else {
return "No username was set"
}
Run Code Online (Sandbox Code Playgroud)
您不应该关心是否设置了密钥。有一种更优雅的方法可以在 中使用默认值UserDefaults:
UserDefault.standard.register(defaults: ["username": "No username was set"])
Run Code Online (Sandbox Code Playgroud)
如果您在应用程序启动时运行此代码,则如果尚未为该键设置值,则后续调用UserDefaults.standard.string(forKey: "username")将返回默认值。"No username was set"
简单代码,用于检查值是否存储在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")
}
Run Code Online (Sandbox Code Playgroud)