快速编码设计

标签 swift codable

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

相关文章:

SwiftUI 测试版 7 : Trigger `List` to scroll when item added?

json - reduce 函数正在打印一个空字典 [ :]

ios - Swift 可编码,当 JSON 中缺少键时,类属性的默认值

swift - 如何在不损失精度的情况下解码 NSDecimalNumber?

ios - Swift4,选择单元格时的背景颜色

ios - UIScrollView:仅缩放某些 View

ios - 使用粒子创建特殊图形?

ios - 快速使用 Realm

ios - 如何处理与 Swift 4 Codable 不一致的 JSON 格式?

swift - 如何使用 Swift 的 Codable 编码成字典?