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?

58
demandé sur Vadim Kotov 2015-07-03 12:26:39

9 réponses

ref: Nuserdefault objectTypes

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.

202
répondu Anbu.karthik 2018-09-07 04:49:27

meilleure façon d'utiliser UserDefaults

Étapes

  1. Créer une extension de UserDefaults
  2. créer enum avec les clés nécessaires pour magasin en local
  3. 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

11
répondu 27J91 2018-01-19 05:01:43

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") 
6
répondu Nikunj Joshi 2018-04-29 11:47:40

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
}
2
répondu DHEERAJ 2015-07-03 10:04:47
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")

//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
1
répondu Dharmesh Kheni 2015-07-03 09:58:38

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
1
répondu Chandni 2018-02-15 22:03:41

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")
0
répondu K.Gowri Manohari 2018-06-22 11:09:05

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)
0
répondu Pramod More 2018-07-16 11:44:30

Swift 4

valeur de réglage:

UserDefaults.standard.set(yourValue, forKey:yourKey)

obtention de la valeur:

UserDefaults.standard.object(forKey: yourKey)
-1
répondu Tahir Pasha 2018-07-16 13:24:20