standard ios swift nsuserdefaults userdefaults

ios - standard - ¿Cómo puedo usar UserDefaults en Swift?



user preferences swift (11)

¿Cómo puedo usar UserDefaults para guardar / recuperar cadenas, booleanos y otros datos en Swift?


Diría que la respuesta de Anbu está perfectamente bien, pero tuve que agregar guardia mientras buscaba las preferencias para que mi programa no fallara

Aquí está el fragmento de código actualizado en Swift 5

Almacenar datos en Preferencias

@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 }

Obteniendo datos de Preferencias

@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")) }


En la clase A , establezca el valor para la clave:

let text = "hai" UserDefaults.standard.setValue(text, forKey: "textValue")

En la clase B , obtenga el valor del texto utilizando la clave que declaró en la clase A y asígnelo a la variable respectiva que necesita:

var valueOfText = UserDefaults.value(forKey: "textValue")


Guardé NSDictionary normalmente y pude obtenerlo correctamente.

dictForaddress = placemark.addressDictionary! as NSDictionary let userDefaults = UserDefaults.standard userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)

// Para obtener datos de NSDictionary.

let userDefaults = UserDefaults.standard let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary


La mejor manera de usar UserDefaults

Pasos

  1. Crear extensión de UserDefaults
  2. Crear enumeración con claves necesarias para almacenar en local
  3. Almacene y recupere los datos locales donde quiera

Muestra

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) } }

enumeración para claves utilizadas para almacenar datos

enum UserDefaultsKeys : String { case isLoggedIn case userID }

Guardar en UserDefaults donde quieras

UserDefaults.standard.setLoggedIn(value: true) // String UserDefaults.standard.setUserID(value: result.User.id!) // String

Recupere datos en cualquier lugar de la aplicación

print("ID : /(UserDefaults.standard.getUserID())") UserDefaults.standard.getUserID()

Eliminar valores

UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID)

De esta manera, puede almacenar datos primitivos de la mejor manera.

Actualización No necesita usar syncize () para almacenar los valores. Como @Moritz señaló que es innecesario y le dio el artículo al respecto. Consulte los comentarios para obtener más detalles


Puede usar NSUserDefaults de forma rápida de esta manera,

@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 4, he usado Enum para manejar UserDefaults.

Esto es solo un código de muestra. Puede personalizarlo según sus requisitos.

Para almacenar, recuperar, eliminar. De esta manera, simplemente agregue una clave para su clave UserDefaults a la enumeración. Maneje valores mientras obtiene y almacena de acuerdo con dataType y sus requisitos.

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() } }

Para almacenar un valor en los valores predeterminados del usuario,

if let authToken = resp.data?.token { UserDefaultsConstant.AuthToken.setValue(value: authToken) }

Para recuperar un valor de los valores predeterminados del usuario,

//As AuthToken value is a string (UserDefaultsConstant.AuthToken.getValue() as! String)


Swift 5 y superior:

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]()

:)


ref: NSUserdefault objectTypes

Swift 3 y superior

Almacenar

UserDefaults.standard.set(true, forKey: "Key") //Bool UserDefaults.standard.set(1, forKey: "Key") //Integer UserDefaults.standard.set("TEST", forKey: "Key") //setObject

Recuperar

UserDefaults.standard.bool(forKey: "Key") UserDefaults.standard.integer(forKey: "Key") UserDefaults.standard.string(forKey: "Key")

retirar

UserDefaults.standard.removeObject(forKey: "Key")

Eliminar todas las llaves

if let appDomain = Bundle.main.bundleIdentifier { UserDefaults.standard.removePersistentDomain(forName: appDomain) }

Swift 2 y abajo

Almacenar

NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey") NSUserDefaults.standardUserDefaults().synchronize()

Recuperar

var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]

retirar

NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")

Nombre del conjunto de valores predeterminados del usuario

otro nombre de conjunto de propiedades, principalmente utilizado para el concepto de Grupos de aplicaciones , el escenario de ejemplo que tomé desde here :

El caso de uso es que quiero separar mis valores predeterminados de usuario (diferentes lógicas comerciales pueden requerir que los valores predeterminados de usuario se agrupen por separado) por un identificador como las Preferencias Compartidas de Android. Por ejemplo, cuando un usuario en mi aplicación hace clic en el botón de cerrar sesión, me gustaría borrar los valores predeterminados relacionados con su cuenta, pero no la ubicación del dispositivo.

let user = UserDefaults(suiteName:"User")

uso de userDefaults sincronizar , la información detallada se ha agregado en la respuesta duplicada.


Swift 4 :

Almacenar

UserDefaults.standard.set(object/value, forKey: "key_name")

Recuperar

var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]

retirar

UserDefaults.standard.removeObject(forKey:"key_name")


//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) } } } }