我的应用程序和 Codable 的使用存在“设计”问题。
我负责管理马匹、教练和类(class)。 我使用一组马、一组教练和一组类(class)(引用马和教练),所有这些都作为变量。
现在我希望将它放在一个库对象中,并在此对象上使用 Codable。
我刚刚创建了一个库类,其中每个类都有一个数组。 我可以很好地加载一个 JSON 文件,并且所有数组都已填充,除了我丢失了马匹和教练的引用。
当我加载这些类时,如果它与一匹马关联,则会创建一个新对象,它不会引用已加载的马。
类库:
class Library : Codable {
var name:String=""
// Instructors
var instructors:[Instructor] = [Instructor]()
// Horses
var horses:[Horse] = [Horse]()
// Courses
var courses:[Course] = [Course]()}
类(class)类(class):
class Course : Codable {
var id:Int
var date:Date
var horse:Horse?
var instructor:Instructor?}
知道如何解决我的问题吗?
我不是特别在寻找技术答案,但你会如何解决这个问题;)
谢谢, 尼古拉斯
最佳答案
最简单的解决方案是显式实现 Decodable 并将类对象的属性设置为对库中的马和教练对象的引用。这会将以下内容添加到库类中:
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
}
}
}
}
关于快速编码设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469221/