Swift 可编码设计
Swift Codable Design
我的应用程序和 Codable 的使用存在 "design" 问题。
我负责管理马匹、教练和 Classes。
我正在使用马匹数组、教练数组和 类 数组(引用马匹和教练),所有这些都作为变量。
现在我希望将它放在一个库对象中,并在此对象上使用 Codable。
我刚刚创建了一个库 Class,其中每个库都有一个数组。
我可以很好地加载 JSON 文件,并且所有数组都已填满,除了我丢失了马匹和教练的参考资料。
当我加载 类 时,如果它与一匹马关联,则会创建一个新对象,它不会引用已加载的马。
Class图书馆:
class Library : Codable {
var name:String=""
// Instructors
var instructors:[Instructor] = [Instructor]()
// Horses
var horses:[Horse] = [Horse]()
// Courses
var courses:[Course] = [Course]()}
Class课程:
class Course : Codable {
var id:Int
var date:Date
var horse:Horse?
var instructor:Instructor?}
知道如何解决我的问题吗?
我不是特别在寻找技术答案,但你会如何解决这个问题 ;)
谢谢,
尼古拉斯
最简单的解决方案是显式实现 Decodable 并将 class 对象的属性设置为对库中的马和教练对象的引用。这会将以下内容添加到库 class:
enum CodingKeys: String, CodingKey {
case name
case instructors
case horses
case courses
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
name = try values.decode(Double.self, forKey: .name)
instructors = try values.decode(Double.self, forKey: .instructors)
horses = try values.decode(Double.self, forKey: .horses)
courses = try values.decode(Double.self, forKey: .courses)
for course in courses {
for hourse in horses {
if(course.horse.id == horse.id){
course.horse = horse
break
}
}
for instructor in insturctors{
if(course.instructor.id == instructor.id){
course.instructor = instructur
break
}
}
}
}
我的应用程序和 Codable 的使用存在 "design" 问题。
我负责管理马匹、教练和 Classes。 我正在使用马匹数组、教练数组和 类 数组(引用马匹和教练),所有这些都作为变量。
现在我希望将它放在一个库对象中,并在此对象上使用 Codable。
我刚刚创建了一个库 Class,其中每个库都有一个数组。 我可以很好地加载 JSON 文件,并且所有数组都已填满,除了我丢失了马匹和教练的参考资料。
当我加载 类 时,如果它与一匹马关联,则会创建一个新对象,它不会引用已加载的马。
Class图书馆:
class Library : Codable {
var name:String=""
// Instructors
var instructors:[Instructor] = [Instructor]()
// Horses
var horses:[Horse] = [Horse]()
// Courses
var courses:[Course] = [Course]()}
Class课程:
class Course : Codable {
var id:Int
var date:Date
var horse:Horse?
var instructor:Instructor?}
知道如何解决我的问题吗?
我不是特别在寻找技术答案,但你会如何解决这个问题 ;)
谢谢, 尼古拉斯
最简单的解决方案是显式实现 Decodable 并将 class 对象的属性设置为对库中的马和教练对象的引用。这会将以下内容添加到库 class:
enum CodingKeys: String, CodingKey {
case name
case instructors
case horses
case courses
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
name = try values.decode(Double.self, forKey: .name)
instructors = try values.decode(Double.self, forKey: .instructors)
horses = try values.decode(Double.self, forKey: .horses)
courses = try values.decode(Double.self, forKey: .courses)
for course in courses {
for hourse in horses {
if(course.horse.id == horse.id){
course.horse = horse
break
}
}
for instructor in insturctors{
if(course.instructor.id == instructor.id){
course.instructor = instructur
break
}
}
}
}