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