UserDefaults 在框架中使用时不保存
UserDefaults not saving when used in a framework
我有一个框架需要在本地保存值,为此我选择了 UserDefaults。
然而,这些值永远不会被保存,并且在重新启动应用程序后,以下读取函数总是return ""
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
得到了相同的结果。
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"
我有一个框架需要在本地保存值,为此我选择了 UserDefaults。
然而,这些值永远不会被保存,并且在重新启动应用程序后,以下读取函数总是return ""
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
得到了相同的结果。
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"