检查UserDefault是否存在 - Swift

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

是的,这是检查的正确方法optionalnil或任意数值objectForKey方法的返回值AnyObject?Implicit optional.

所以如果userDefaults.objectForKey(kUSERID)有任何价值而不是它的评价true.如果userDefaults.objectForKey(kUSERID)nil值比它的计算结果false.

来自swift编程指南

如果语句和强制解包 您可以使用if语句来确定可选项是否包含值.如果可选项具有值,则计算结果为true; 如果它根本没有值,则计算结果为false.

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

重置您的模拟器检查此方法,然后设置键入userDefaultsuserDefaults.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)


Xav*_*ler 6

这里的许多解决方案都是有效的。不过,我认为他们解决了错误的问题。

通常,这样的代码用于检查是否设置了某个值,以便可以使用另一个默认值:

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"


Sud*_*135 5

简单代码,用于检查值是否存储在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)