ios - 如何在 UserDefaults 中保存服务器响应数组以供以后在 Swift 中使用?
问题描述
当用户登录时,我从服务器得到一个包含如下数组的答案:
{"answer":{"id":26,"username":"iosuser","address":"iosios","phone_number":"123123123","email":"gmail@gmail.com","created_at":"2019-02-02 12:42:50","updated_at":"2019-02-02 21:40:29","provider_id":"1","is_loged_in":1,"user_id":"24","user_type":1}}
如何将此数组的数据保存在 userdefaults 中并稍后在个人资料页面中使用?
非常感谢任何帮助。
解决方案
首先不建议保存在 userDefault 中,可以使用 coredata/realm ,而你的内容是包含数组的字典,但是可以
struct Root: Codable {
let answer: Answer
}
struct Answer: Codable {
let id: Int
let username, address, phoneNumber, email: String
let createdAt, updatedAt, providerID: String
let isLogedIn: Int
let userID: String
let userType: Int
enum CodingKeys: String, CodingKey {
case id, username, address
case phoneNumber = "phone_number"
case email
case createdAt = "created_at"
case updatedAt = "updated_at"
case providerID = "provider_id"
case isLogedIn = "is_loged_in"
case userID = "user_id"
case userType = "user_type"
}
}
UserDefaults.standard.set(data,forKey:"AnyKey")
然后读取数据并
let res = try? JSONDecoder().decode(Root.self,from:data)
如果您只需要剥离阵列
do {
let tr = try JSONSerialization.jsonObject(with:data) as! [String:Any]
let arr = tr["answer"] as! [Any]
let ansData = try JSONSerialization.data(withJSONObject:arr, options:[])
UserDefaults.standard.set(ansData,forKey:"AnyKey")
} catch { print(error) }
之后像这样读
guard let data = UserDefaults.standard.data(forKey:"AnyKey") else { return }
let res = try? JSONDecoder().decode([Answer].self,from:data)
推荐阅读
- c++ - 尝试在内核模式下打印出所有进程的名称及其 PID
- r - 通过最近匹配加入两个数据帧
- python - 使用带有 tune.with_parameters 的可训练类时出现 Ray Tune 错误
- android - Firebase auth getDisplayedName,getPhoto url 问题
- correlation - 相关矩阵的corrplot和pheatmap之间的区别?如何使两者之间保持一致
- firebase - 使用 GitHub 操作在 Firebase 主机上自动部署 Vue-CLI 项目
- android-chips - 如何以编程方式正确设置芯片颜色
- git - 为什么当我在新分支中使用新提交执行 git 合并请求时,会出现非常旧的提交(可能从未合并过?)?
- amazon-web-services - 更大的 EBS 卷是否需要更多的 IOPS?
- notifications - 为什么我无法发送 OneSignal 通知?