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?
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
}
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
}
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
.
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
}
}
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")
}
pour Swift 3.2
func userAlreadyExist(kUsernameKey: String) -> Bool {
return UserDefaults.standard.object(forKey: kUsernameKey) != nil
}