UserDefaults не сохраняется при использовании в рамках - PullRequest
1 голос
/ 01 октября 2019

У меня есть фреймворк, которому нужно сохранять значения локально, для этого я выбрал UserDefaults.

Однако значения никогда не сохраняются, и следующая функция чтения всегда возвращает "" после перезапуска приложения

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

Инициализировано с помощью:

let preferences = Preferences(preferences: UserDefaults.standard)

Я пробовал:

  • Симулятор и физическое устройство
  • Отладка иРелиз
  • UserDefaults и SwiftyUserDefaults

Странно то, что при этом сохраняются Bool значения, но не строковые.

Я думал, что это можетот неправильного использования UserDefaults, но SwiftyUserDefaults получает тот же результат.

1 Ответ

1 голос
/ 01 октября 2019
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) }
    }

}

Я предлагаю вам создать отдельный файл, называемый чем-то вроде AppDefaults и т. Д. Затем вы можете получить доступ к каждому значению по умолчанию как таковому

var text = AppDefaults().defaultString

Затем вы можете перезаписать его, и он будет автоматически сохранен с помощью

AppDefaults().defaultString = "Bananas"
...