我的应用程序和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/

10-11 14:43