Tengo un marco que necesita guardar valores localmente, para eso elegí UserDefaults.

Sin embargo, los valores nunca se guardan y la siguiente función de lectura siempre regresa "" después de reiniciar la aplicación.

class Preferences {
    let preferences : UserDefaults

    init (preferences : UserDefaults) {
        self.preferences = preferences
    }

    // Private Key
    func savePrivateKey(key : String) {
        writeString(value: key, key: privateKeyKey)
    }

    func readPrivateKey() -> String! {
        return readString(key: privateKeyKey)
    }

    private func readString(key : String) -> String? {
        if preferences.object(forKey: key) == nil {
            return "bananas"
        } else {
            return preferences.string(forKey: key)
        }
    }

    private func writeString(value : String, key : String) {
        preferences.set(value, forKey: key)
    }

    fileprivate let privateKeyKey = "privateKey"
}

Inicializado con:

let preferences = Preferences(preferences: UserDefaults.standard)

He intentado:

  • Simulador y dispositivo físico
  • Depurar y liberar
  • UserDefaults y SwiftyUserDefaults

Lo extraño es que esto está guardando los valores Bool, pero no los de cadena.

Pensé que esto podría deberse a no usar correctamente UserDefaults, pero SwiftyUserDefaults obtiene el mismo resultado.

2
Vanethos 1 oct. 2019 a las 10:36

1 respuesta

La mejor respuesta
import Foundation

public class AppDefaults {
    private let defaultStringKey = "DefaultString"
}

public extension AppDefaults {

    var defaultString: String? {
        get { return UserDefaults.standard.string(forKey: defaultStringKey) }
        set { UserDefaults.standard.set(newValue?.description, forKey: defaultStringKey) }
    }

}

Le sugiero que cree un archivo separado llamado algo como AppDefaults, etc. Luego puede acceder a cada uno de los valores predeterminados como tal

var text = AppDefaults().defaultString

Luego puede sobrescribirlo y se guardará automáticamente usando

AppDefaults().defaultString = "Bananas"
1
HJDavies 1 oct. 2019 a las 08:12