UserDefaults 和 AppStorage 混用时默认值的问题

UserDefaults 和 AppStorage 混用时,默认值不统一的问题。因为AppStorage持久化时机不确定,UserDefaults先调用时可能获取的值仍是系统默认值。

解决方案有两种:

1. UserDefaults.standard.object(forKey:) == nil 判断。

1
2
3
if UserDefaults.standard.object(forKey: "hasHapticFeedback") == nil {
UserDefaults.standard.set(true, forKey: "hasHapticFeedback")
}

2. 借助SwiftyUserDefaults,但是对于纯SwiftUI项目,没必要。

1
2
3
4
5
extension DefaultsKeys {
var userColorScheme: DefaultsKey<String> { .init("userColorScheme", defaultValue: "default") }
var userThemeName: DefaultsKey<String?> { .init("userThemeName") }
var userLastLoginDate: DefaultsKey<Date?> { .init("userLastLoginDate") }
}