Comment utiliser UserDefaults pour enregistrer/récupérer des chaînes, des booléens et d'autres données dans Swift?
ref: NSUserdefault objectTypes
Le 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")
Retirer
UserDefaults.standard.removeObject(forKey: "Key")
Supprimer toutes les clés
if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
}
Le magasin
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()
Récupérer
var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]
Retirer
NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")
une autre propriété nom de la suite , principalement utilisé pour Concept de groupes d’applications , exemple de scénario tiré de ici :
Le cas d’utilisation est que je souhaite séparer mes UserDefaults (une logique d’entreprise différente peut nécessiter que les Userdefaults soient regroupés séparément) par un identifiant similaire aux SharedPreferences d’Android. Par exemple, lorsqu'un utilisateur de mon application clique sur le bouton de déconnexion, je souhaite supprimer les paramètres par défaut de son compte, mais pas l'emplacement du périphérique.
let user = UserDefaults(suiteName:"User")
utilisation de userDefaults synchronize , les informations détaillées ont été ajoutées à la réponse dupliquée.
Meilleure façon d'utiliser UserDefaults
Pas
É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 for Touches utilisées pour stocker des données
enum UserDefaultsKeys : String {
case isLoggedIn
case userID
}
Enregistrer dans UserDefaults où vous voulez
UserDefaults.standard.setLoggedIn(value: true) // Bool
UserDefaults.standard.setUserID(value: result.User.id!) // String
Récupérer des données n'importe où dans l'application
print("ID : \(UserDefaults.standard.getUserID())")
UserDefaults.standard.getUserID()
Supprimer des valeurs
UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID)
De cette façon, vous pouvez stocker des données primitives au mieux.
Update Vous n’avez pas besoin de synchroniser () pour stocker les valeurs. Comme @Moritz le soulignait inutile et compte tenu de l'article à ce sujet. Vérifiez les commentaires pour plus de détails
Swift 4 :
Le magasin
UserDefaults.standard.set(object/value, forKey: "key_name")
Retrive
var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]
Retirer
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
}
Swift 5 et plus:
let defaults = UserDefaults.standard
defaults.set(25, forKey: "Age")
let savedInteger = defaults.integer(forKey: "Age")
defaults.set(true, forKey: "UseFaceID")
let savedBoolean = defaults.bool(forKey: "UseFaceID")
defaults.set(CGFloat.pi, forKey: "Pi")
defaults.set("Your Name", forKey: "Name")
defaults.set(Date(), forKey: "LastRun")
let array = ["Hello", "World"]
defaults.set(array, forKey: "SavedArray")
let savedArray = defaults.object(forKey: "SavedArray") as? [String] ?? [String()
let dict = ["Name": "Your", "Country": "YourCountry"]
defaults.set(dict, forKey: "SavedDict")
let savedDictionary = defaults.object(forKey: "SavedDictionary") as? [String: String] ?? [String: String]()
:)
J'ai enregistré NSDictionary normalement et capable de l'obtenir correctement.
dictForaddress = placemark.addressDictionary! as NSDictionary
let userDefaults = UserDefaults.standard
userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)
// Pour obtenir des données de NSDictionary.
let userDefaults = UserDefaults.standard
let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")
//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
class UserDefaults_WorstPresidentName {
static let key = "appname.worstPresidentName"
static var value: String? {
get {
return UserDefaults.standard.string(forKey: key)
}
set {
if newValue != nil {
UserDefaults.standard.set(newValue, forKey: key)
} else {
UserDefaults.standard.removeObject(forKey: key)
}
}
}
}
Je dirais la réponse d'Anbu parfaitement, mais je devais ajouter une protection tout en cherchant les préférences pour que mon programme échoue
Voici le code mis à jour dans Swift 5
Stockage des données dans les préférences
@IBAction func savePreferenceData(_ sender: Any) {
print("Storing data..")
UserDefaults.standard.set("RDC", forKey: "UserName") //String
UserDefaults.standard.set("TestPass", forKey: "Passowrd") //String
UserDefaults.standard.set(21, forKey: "Age") //Integer
}
Récupération des données depuis les préférences
@IBAction func fetchPreferenceData(_ sender: Any) {
print("Fetching data..")
//added guard
guard let uName = UserDefaults.standard.string(forKey: "UserName") else { return }
print("User Name is :"+uName)
print(UserDefaults.standard.integer(forKey: "Age"))
}
Dans la classe A
, définissez la valeur de la clé:
let text = "hai"
UserDefaults.standard.setValue(text, forKey: "textValue")
Dans la classe B
, obtenez la valeur du texte à l'aide de la clé déclarée dans la classe A
et affectez-la à la variable respective dont vous avez besoin:
var valueOfText = UserDefaults.value(forKey: "textValue")