Comment utiliser UserDefaults dans Swift?
Comment puis-je utiliser UserDefaults pour sauvegarder/récupérer des chaînes, des booléens et d'autres données dans Swift?
9 réponses
Swift 3 et plus
Magasin
UserDefaults.standard.set(true, forKey: "Key") //Bool
UserDefaults.standard.set(1, forKey: "Key") //Integer
UserDefaults.standard.set("TEST", forKey: "Key") //setObject
Récupérer
UserDefaults.standard.bool(forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
UserDefaults.standard.string(forKey: "Key")
Supprimer
UserDefaults.standard.removeObject(forKey: "Key")
supprimer toutes les touches
if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
}
Swift 2 et inférieur
Magasin
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()
Récupérer
var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]
Supprimer
NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")
UserDefaults costume nom
un autre de la propriété costume nom , principalement utilisé pour App Groupes de concept , l'exemple de scénario que j'ai pris de ici :
le cas d'utilisation est que je veux séparer mes UserDefaults (logique d'affaires différente peut exiger Userdefaults à grouper séparément) par un identifiant tout comme SharedPreferences D'Android. Par exemple, lorsqu'un utilisateur de mon application clique sur le bouton de déconnexion, j'ai envie d'effacer son compte par défaut, mais pas de l'emplacement de l'appareil.
let user = UserDefaults(suiteName:"User")
utilisation de userdefaults synchroniser , le détail info a ajouté dans la réponse dupliquée.
meilleure façon d'utiliser UserDefaults
Étapes
- Créer une extension de UserDefaults
- créer enum avec les clés nécessaires pour magasin en local
- stocker et récupérer les données locales où vous voulez
échantillon
extension UserDefaults{
//MARK: Check Login
func setLoggedIn(value: Bool) {
set(value, forKey: UserDefaultsKeys.isLoggedIn.rawValue)
//synchronize()
}
func isLoggedIn()-> Bool {
return bool(forKey: UserDefaultsKeys.isLoggedIn.rawValue)
}
//MARK: Save User Data
func setUserID(value: Int){
set(value, forKey: UserDefaultsKeys.userID.rawValue)
//synchronize()
}
//MARK: Retrieve User Data
func getUserID() -> Int{
return integer(forKey: UserDefaultsKeys.userID.rawValue)
}
}
enum pour les clés utilisées pour stocker des données
enum UserDefaultsKeys : String {
case isLoggedIn
case userID
}
Enregistrer dans UserDefaults où tu veux
UserDefaults.standard.setLoggedIn(value: true) // Bool
UserDefaults.standard.setUserID(value: result.User.id!) // integer
Récupérer les données n'importe où dans l'application
print("ID : \(UserDefaults.standard.getUserID())")
UserDefaults.standard.getUserID()
Supprimer Les Valeurs
UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID)
de cette façon, vous pouvez stocker des données primitives dans le meilleur
mise à Jour Vous n'avez pas besoin d'utiliser Synchroniser () pour stocker les valeurs. Comme @Moritz l'a souligné la TI inutile et compte tenu de l'article à ce sujet.Voir les commentaires pour plus de détails
Swift 4 :
Magasin
UserDefaults.standard.set(object/value, forKey: "key_name")
retrieve
var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]
Supprimer
UserDefaults.standard.removeObject(forKey:"key_name")
vous pouvez utiliser NSUserDefaults
dans swift de cette façon,
@IBAction func writeButton(sender: UIButton)
{
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("defaultvalue", forKey: "userNameKey")
}
@IBAction func readButton(sender: UIButton)
{
let defaults = NSUserDefaults.standardUserDefaults()
let name = defaults.stringForKey("userNameKey")
println(name) //Prints defaultvalue in console
}
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")
//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
j'ai sauvé NSDictionary normalement et capable de l'obtenir correctement.
dictForaddress = placemark.addressDictionary! as NSDictionary
let userDefaults = UserDefaults.standard
userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)
// Pour l'obtention de données de NSDictionary.
let userDefaults = UserDefaults.standard
let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary
dans la classe A
, valeur de consigne pour la clé:
let text = "hai"
UserDefaults.standard.setValue(text, forKey: "textValue")
dans la classe B
, obtenir la valeur pour le texte en utilisant la clé qui a déclaré dans la classe A
et l'assigner à la variable respective dont vous avez besoin:
var valueOfText = UserDefaults.value(forKey: "textValue")
Swift 4, J'ai utilisé Enum pour gérer UserDefaults.
ce n'est qu'un exemple de code. Vous pouvez le personnaliser selon vos besoins.
Pour Le Stockage, La Récupération, La Suppression. De cette façon, il suffit d'ajouter une clé pour votre clé UserDefaults à l'enum. Gérer les valeurs tout en obtenant et en stockant selon le type de données et vos exigences.
enum UserDefaultsConstant : String {
case AuthToken, FcmToken
static let defaults = UserDefaults.standard
//Store
func setValue(value : Any) {
switch self {
case .AuthToken,.FcmToken:
if let _ = value as? String {
UserDefaults.standard.set(value, forKey: self.rawValue)
}
break
}
UserDefaults.standard.synchronize()
}
//Retrieve
func getValue() -> Any? {
switch self {
case .AuthToken:
if(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) != nil) {
return "Bearer "+(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) as! String)
}
else {
return ""
}
case .FcmToken:
if(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) != nil) {
print(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue))
return (UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) as! String)
}
else {
return ""
}
}
}
//Remove
func removeValue() {
UserDefaults.standard.removeObject(forKey: self.rawValue)
UserDefaults.standard.synchronize()
}
}
pour stocker une valeur dans userdefaults,
if let authToken = resp.data?.token {
UserDefaultsConstant.AuthToken.setValue(value: authToken)
}
pour récupérer une valeur de userdefaults,
//As AuthToken value is a string
(UserDefaultsConstant.AuthToken.getValue() as! String)
Swift 4
valeur de réglage:
UserDefaults.standard.set(yourValue, forKey:yourKey)
obtention de la valeur:
UserDefaults.standard.object(forKey: yourKey)