SwiftUI 使用UserDefaults存储用户设置

UserDefaults
允许存储直接附加到应用程序的少量(没有具体的限制)用户数据
存储在UserDefaults中的所有内容都会在应用程序启动时自动加载,如果存储的内容很多的话,就会导致应用启动速度变慢
一般来说不超过512KB
⚠️它是字符串类型

import SwiftUI

struct UseUserDefaultsUIView: View {
    @State private var tapCount = UserDefaults.standard.integer(forKey: "Tap")
    
    var body: some View {
        VStack(alignment: .leading, spacing: nil, content: {
            Button(action: {
                self.tapCount += 1
                UserDefaults.standard.set(self.tapCount,forKey: "Tap")
            }, label: {
                Text("Tap count: \(tapCount)")
            })
            
            Spacer()
        })
    }
}

struct UseUserDefaultsUIView_Previews: PreviewProvider {
    static var previews: some View {
        UseUserDefaultsUIView()
    }
}

本博文中的案例来自【100 Days of SwiftUI——使用UserDefaults存储用户设置】

SwiftUI中,`UserDefaults`通常用于存储简单的键值对数据,比如字符串、数字等基本类型。如果你想保存更复杂的数据结构,如自定义的对象(例如模型类),你需要将对象转换为可以序列化的形式。以下是保存Swift UI中的自定义对象到`UserDefaults`的基本步骤: 1. 首先,确保你的对象实现了`Codable`协议,这是Swift内置的编码和解码系统的要求。 ```swift class CustomObject: Codable { // ... } ``` 2. 将对象转换为Data类型,并保存: ```swift func saveObject(_ object: CustomObject) { let encoder = JSONEncoder() if let encodedData = try? encoder.encode(object) { UserDefaults.standard.set(encodedData, forKey: "customObjectKey") } } // 调用保存方法 let myCustomObject = CustomObject() // 创建并初始化对象 saveObject(myCustomObject) ``` 3. 当需要从`UserDefaults`加载对象时,再进行反序列化: ```swift func loadObject() -> CustomObject? { if let storedData = UserDefaults.standard.data(forKey: "customObjectKey") { do { let decoder = JSONDecoder() return try decoder.decode(CustomObject.self, from: storedData) } catch { print("Failed to decode object: \(error)") return nil } } return nil } if let loadedObject = loadObject() { // 使用加载的对象 } ``` 注意:在实际应用中,对于频繁更新的对象,可能不适合直接保存整个对象,而应该考虑使用`CodingKeys`来管理属性的编码和解码,以及定期刷新缓存策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值