J'essaye de vérifier si le défaut d'un utilisateur existe, vu ci-dessous:
func userAlreadyExist() -> Bool {
var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey(kUSERID) {
return true
}
return false
}
Cependant, peu importe ce qu'il retournera toujours vrai même si l'objet n'existe pas encore? Est-ce la bonne façon de vérifier l'existence?
ios
swift
nsuserdefaults
Ryan
la source
la source
Oui, c'est la bonne façon de vérifier la méthode
optional
havenil
ou n'importe quelle valeur qui estobjectForKey
renvoyée .AnyObject?
Implicit optional
Donc si
userDefaults.objectForKey(kUSERID)
avoir une valeur à laquelle il évaluetrue
. siuserDefaults.objectForKey(kUSERID)
a unenil
valeur à laquelle il évaluefalse
.À partir du guide de programmation rapide
Maintenant, il y a un bogue dans les simulateurs,
userDefaults
car après avoir défini la clé, ils restent toujours définis, peu importe que vous supprimiez votre application.Vous devez réinitialiser le simulateur.Réinitialiser votre simulateur vérifier cette méthode avant de clé
userDefaults
ou retirer la cléuserDefaults.removeObjectForKey(kUSERID)
deuserDefaults
et il retournera desNO
dispositifs .oN il est résolu dansiOS8 beta4
.la source
objectForKey
méthode retourneAnyObject!
qui est implicite facultative" C'est faux, elle retourneAnyObject?
if anOptional { }
et il vous suggérera de tester en utilisant == nil ou! =C'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 { static func contains(_ key: String) -> Bool { return UserDefaults.standard.object(forKey: key) != nil } }
usage:
if UserDefaults.contains(kUSERID) { ... }
la source
static func contains(key: String) -> Bool
. Sinon, cela a plus de sens à fairereturn self.object(forKey: key) != nil
Code simple pour vérifier si la valeur 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") }
la source
pour swift 3.2
func userAlreadyExist(kUsernameKey: String) -> Bool { return UserDefaults.standard.object(forKey: kUsernameKey) != nil }
la source
public class PreferencesUtils { private init() { } public static func setBoolData(boolValue: Bool, dataName: String) { UserDefaults.standard.set(boolValue, forKey: dataName) } public static func getBoolData(dataName: String)-> Bool{ let defaults = UserDefaults.standard if(defaults.value(forKey: dataName) != nil) { return defaults.value(forKey: dataName)! as! Bool } else { return false } } public static func saveStringData(data: String, dataName: String){ let preferences = UserDefaults.standard preferences.set(data, forKey: dataName) let didSave = preferences.synchronize() if !didSave { debugPrint("Not saved yet") } } public static func getSavedStringData(dataName: String)-> String{ let defaults = UserDefaults.standard if(defaults.value(forKey: dataName) != nil){ return defaults.value(forKey: dataName) as! String } else { return "" } } public static func saveIntData(data : Int, dataName: String){ let preferences = UserDefaults.standard preferences.set(data, forKey: dataName) let didSave = preferences.synchronize() if !didSave { debugPrint("Not saved yet") } } public static func getSavedIntData(dataName: String) -> Int { let defaults = UserDefaults.standard if(defaults.value(forKey: dataName) != nil){ return defaults.value(forKey: dataName) as! Int }else{ return 0 } } }
Ou vous pouvez essayer cette bibliothèque: Lien
la source
func keyExists(key: String) -> Bool { guard let _ = UserDefaults.standard.object(forKey: key) { return false; } return true; }
la source
remplacer la fonction viewDidLoad () {
super.viewDidLoad ()
if UserDefaults.standard.string (forKey: "CHARRY") == "CHARRY" {
lb.text = "CHARRY" im.image = UIImage(named: "CHARRY")
}}
@IBAction func PressedCar(_ sender: UIButton){ lb.text = "CHARRY" im.image = UIImage(named: "CHARRY") UserDefaults.standard.set("CAR", forKey: "CHARRY") }
la source
Beaucoup de solutions ici sont valables. Pourtant, je pense qu'ils résolvent le mauvais problème.
Habituellement, un code comme celui-ci est utilisé pour vérifier si une valeur est définie afin qu'une autre valeur par défaut puisse être utilisée:
if isKeyPresentInUserDefaults(key: "username") { return UserDefaults.standard.string(forKey: "username") } else { return "No username was set" }
Vous ne devriez pas vous soucier si une clé est définie ou non. Il existe une approche beaucoup plus élégante pour avoir des valeurs par défaut dans
UserDefaults
:UserDefault.standard.register(defaults: ["username": "No username was set"])
Si vous exécutez ce code au lancement de l'application, les appels suivants à
UserDefaults.standard.string(forKey: "username")
renverront la valeur par défaut de"No username was set"
si aucune valeur n'a encore été définie pour la clé.la source