web-dev-qa-db-fra.com

Vérifiez si UserDefault existe - Swift

J'essaie de vérifier si la valeur par défaut d'un utilisateur existe (voir ci-dessous):

func userAlreadyExist() -> Bool {
    var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

Cependant, peu importe ce qui sera retourné toujours vrai même si l'objet n'existe pas encore? Est-ce la bonne façon de vérifier l'existence?

66
Ryan

Astun a une excellente réponse. Voir ci-dessous pour la version Swift 3.

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

J'ai copié/collé votre code, mais Xcode 6.1.1 lançait des erreurs, il ressemblait à ceci et fonctionne comme un charme. Merci!

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

Oui, c’est la bonne façon de vérifier si la méthode optional a nil ou n’importe quelle valeur objectForKey renvoie AnyObject?, Qui est Implicit optional.

Donc, si userDefaults.objectForKey(kUSERID) a une valeur quelconque, elle est évaluée à true. si userDefaults.objectForKey(kUSERID) a la valeur nil qu'il vaut false.

De Swift programmation guide

Instructions if et décompression forcée Vous pouvez utiliser une instruction if pour déterminer si une valeur optionnelle contient une valeur. Si un facultatif a une valeur, sa valeur est true; s'il n'a aucune valeur, il est évalué à false.

Il y a maintenant un bogue dans les simulateurs: après la définition de la clé dans userDefaults, ils restent toujours activés, que vous supprimiez votre application ou non. Vous devez réinitialiser le simulateur.

Réinitialisez votre simulateur cochez cette méthode avant de définir la clé dans userDefaults ou supprimez la clé userDefaults.removeObjectForKey(kUSERID) de userDefaults et il retournera NO. Sur les périphériques, le problème est résolu dans iOS8 beta4.

21
codester

Ceci est essentiellement le même que celui suggéré dans d'autres réponses mais d'une manière plus pratique (Swift 3+):

extension UserDefaults {
    func contains(key: String) -> Bool {
        return UserDefaults.standard.object(forKey: key) != nil
    }
}
10
Sir Codesalot

Code simple pour vérifier si la valeur est stockée dans 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")
}
4
Sudhi 9135

pour Swift 3.2

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