在SwiftUI中,@AppStorage
属性包装器用于在应用的生命周期内持久化存储数据。当你需要在应用关闭并重新打开后仍然保留某些数据时,这非常有用。@AppStorage
默认使用 UserDefaults
作为其后端存储。
@AppStorage
是 SwiftUI 的一个属性包装器,它允许你将属性的值存储到应用的 UserDefaults
中。当属性值发生变化时,它会自动更新存储的值,并在应用启动时恢复这些值。
UserDefaults
。@AppStorage
可以用于存储基本数据类型(如 String, Int, Bool 等)以及它们的可选类型。对于自定义类型,需要实现 Codable
协议才能使用 @AppStorage
。
当你需要在应用的不同会话之间保持用户设置或其他配置时,可以使用 @AppStorage
。
要使用 @AppStorage
存储枚举类型,枚举需要遵循 Codable
协议。下面是一个例子:
import SwiftUI
enum UserPreference: String, Codable {
case darkMode = "dark_mode"
case lightMode = "light_mode"
}
struct ContentView: View {
@AppStorage("userPreference") var preference: UserPreference = .darkMode
var body: some View {
VStack {
Text("Current theme:")
Text(preference.rawValue)
.padding()
Button(action: {
if preference == .darkMode {
preference = .lightMode
} else {
preference = .darkMode
}
}) {
Text("Toggle Theme")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在这个例子中,我们定义了一个 UserPreference
枚举,并为其赋予了字符串类型的 raw values。这样,每个枚举案例都有一个与之关联的字符串值,这些字符串值将作为 UserDefaults
中的键。
在 ContentView
结构体中,我们声明了一个 @AppStorage
属性 preference
,其类型为 UserPreference
。默认值设置为 .darkMode
。当用户切换主题时,preference
的值会改变,并且这个改变会被自动保存到 UserDefaults
中。
如果你遇到 @AppStorage
无法正确存储或恢复枚举值的问题,确保你的枚举遵循了 Codable
协议,并且 raw values 是唯一的。如果问题仍然存在,检查是否有其他代码修改了 UserDefaults
中对应的键值。
SwiftUI @AppStorage Swift Codable
请注意,上述代码示例中的 UserDefaults
键 "userPreference"
应该是唯一的,以避免与其他可能使用相同键的应用冲突。此外,由于 UserDefaults
是一个简单的键值存储系统,它不适合存储大量数据或敏感信息。对于这些情况,你可能需要考虑使用其他持久化解决方案,如 Core Data 或文件系统。
领取专属 10元无门槛券
手把手带您无忧上云