2

我有一个需要在本地保存值的框架,为此我选择了 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得到了相同的结果。

4

1 回答 1

1
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"
于 2019-10-01T08:12:51.753 回答