首页 > 解决方案 > 如何将我的 [Response] 模型保存到 UserDefault 以进行离线持久性?

问题描述

我希望能够保留我的数据模型以供离线使用。我正在使用一个看起来像这样的结构:

public struct Response: Codable {
    var id: String
    var title: String
    var message: String
    var user: User
}

是否可以将整个 Response 对象存储到 UserDefaults 中?即使离线,我也想显示这些数据。我正在使用带有一个名为 responseObject 的 State var 的 SwiftUI,它将对 UI 上的更改做出反应。我创建了一个列表并遍历了 responseObject 中的项目:

 @State private var responseObject = [Response]()

    List(self.responseObject, id: \.id) { item in
        HStack {
            Spacer()
            VStack {
                URLImage(url: item.message)
                    .frame(width: 240, height: 240)
                    .aspectRatio(contentMode: .fit)
                    .cornerRadius(10)
                Text(item.title)
                    .font(.headline)
                    .multilineTextAlignment(.center)
                    .foregroundColor(Color(UIColor.white))
                    .padding(.horizontal, 8)
                Text(item.user.name)
                    .font(.subheadline)
                    .multilineTextAlignment(.center)
                    .foregroundColor(Color(UIColor.white))
                    .padding(.horizontal, 8)
            }
            Spacer()
        }
    }

我正在尝试将 json 中的 decodedResponse 存储到 UserDefault 中,例如:

UserDefaults.standard.set(decodedResponse.stories, forKey: "responseData")

然后如果离线,更新 responseObject 状态变量,如

self.responseObject = defaults.object(forKey: "responseData") as! [Response]

离线时会崩溃。认为我可能错误地使用了默认值。想要避免像 CoreData 这样过于复杂的东西.....

还是有更“SwiftUI”的方式来实现这一点?

任何信息将不胜感激!谢谢!

标签: iosswiftxcodeswiftuiuserdefaults

解决方案


推荐阅读