Saltar al contenido

¿Cómo puedo usar UserDefaults en Swift?

Te recomendamos que revises esta solución en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

ref: NSUserdefault objectTypes

Swift 3 y superior

Tienda

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

Eliminar

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

Eliminar todas las claves

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

Swift 2 y menos

Tienda

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

Recuperar

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

Eliminar

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


Registrarse

registerDefaults: agrega el registrationDictionary al último elemento de cada lista de búsqueda. Esto significa que después de que NSUserDefaults haya buscado un valor en todas las demás ubicaciones válidas, buscará los valores predeterminados registrados, lo que los hará útiles como un valor “alternativo”. Los valores predeterminados registrados nunca se almacenan entre ejecuciones de una aplicación y solo son visibles para la aplicación que los registra.

Los valores predeterminados de los archivos de configuración predeterminados se registrarán automáticamente.

por ejemplo, detectar la aplicación desde el lanzamiento, crear la estructura para guardar el lanzamiento

struct DetectLaunch 
static let keyforLaunch = "validateFirstlunch"
static var isFirst: Bool 
    get 
        return UserDefaults.standard.bool(forKey: keyforLaunch)
    
    set 
        UserDefaults.standard.set(newValue, forKey: keyforLaunch)
    


Registre los valores predeterminados al iniciar la aplicación:

UserDefaults.standard.register(defaults: [
        DetectLaunch.isFirst: true
    ])

eliminar el valor en la terminación de la aplicación:

func applicationWillTerminate(_ application: UIApplication) 
    DetectLaunch.isFirst = false


y verifique la condición como

if DetectLaunch.isFirst 
  // app launched from first


Nombre de la suite de valores predeterminados de usuario

otro nombre de suite de propiedad, principalmente se usa para Concepto de grupos de aplicaciones, el escenario de ejemplo que tomé de aquí:

El caso de uso es que quiero separar mis UserDefaults (una lógica comercial diferente puede requerir que los Userdefaults se agrupen por separado) por un identificador como las SharedPreferences de Android. Por ejemplo, cuando un usuario de mi aplicación hace clic en el botón de cierre de 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.

La mejor forma de usar Valores predeterminados de usuario

Pasos

  1. Crear extensión de UserDefaults
  2. Cree una enumeración con las 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

Recuperar datos en cualquier lugar de la aplicación

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

Quitar valores

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

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

Actualizar
No necesitas sincronizar () para almacenar los valores. Como @Moritz señaló que es innecesario y dio el artículo al respecto.Consulte los comentarios para obtener más detalles.

Rápido 4 :

Tienda

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

Recuperar

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

Eliminar

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

Puedes auxiliar nuestra función fijando un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *