arrays - 保存包含类数据的表
问题描述
我想保存并重新读取“课程”中的数据。我今天正在尝试使用 Userdefaults,但它不起作用。
代码:
var Cours = [CoursParNiveau]()
班级:
class CoursParNiveau: NSObject, NSCoding {
var DateLecon:String?
var HoraireLecon: String?
init (Date: String, Horaire: String){
self.DateLecon = Date
self.HoraireLecon = Horaire
}
func encode(with aCoder: NSCoder) {
aCoder.encode(DateLecon, forKey: "Date")
aCoder.encode(HoraireLecon, forKey: "Horaire")
}
required init?(coder aDecoder: NSCoder) {
self.DateLecon = aDecoder.decodeObject(forKey: "Date") as? String
self.HoraireLecon = aDecoder.decodeObject(forKey: "Horaire") as? String
}
}
解决方案
尝试使用Codable
编码/解码 data
来保存/获取UserDefaults
.
符合并实施CoursParNiveau
以定义您在编码/解码时要使用的自定义,即Codable
enum CodingKeys
keys
class CoursParNiveau: Codable {
var DateLecon: String?
var HoraireLecon: String?
enum CodingKeys: String, CodingKey {
case DateLecon = "Date"
case HoraireLecon = "Horaire"
}
}
保存到UserDefaults
:
do {
let data = try JSONEncoder().encode(Cours)
UserDefaults.standard.set(data, forKey: "CoursParNiveau")
} catch {
print(error)
}
取自UserDefaults
:
if let data = UserDefaults.standard.data(forKey: "CoursParNiveau") {
do {
self.Cours = try JSONDecoder().decode([CoursParNiveau].self, from: data)
} catch {
print(error)
}
}
推荐阅读
- ios - 在 CGContext 中渲染两个 UILabel 而不重叠
- python - Python - 在自定义函数中通过 for 循环添加列表的所有元素
- excel - 是否可以在属性 get 中设置条件参数类型?
- android - 登录后更改活动
- java - 在 Apache Camel 中多播文件的问题
- php - 在 php 文件中统一数据库初始化
- linux - git pre-receive 钩子获取所有提交
- arrays - 如何在powershell中组合和重命名数组的属性?
- wpf - 如何通过单击形状为图像设置动画(更改网格上任何图像的位置)?
- javascript - 如果不是未定义的,如何从多个对象中删除属性?