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
- Crear extensión de UserDefaults
- Cree una enumeración con las claves necesarias para almacenar en local
- 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.