我想保存并重新读取“课程”中的数据。我今天尝试使用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
}
}
答案 0 :(得分:0)
尝试使用 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)
}
}