如何在 swift 中编写正确的聚合 class

how to write a right aggregation class in swift

例如,我有一个关于 Vehicle 的 class,在这个 class 中,我有一个私人的 属性 带有日期的名称,这个 属性 应该得到一个或多个与时间相关的数据来自另一个名为 CalendarInfo 的 class。 CalendarInfo class 与 Vehicle class 具有聚合关系。由于我是 swift 的新手,我只需要帮助来理解我需要为此编写的代码的概念,从 class 到 link 属性到另一个具有聚合关系的class。我希望你能明白我的意思。

这是代码我不确定它们是否正确

class Vehicle {

private var id: UInt?
private var model = ""
private var dateTimes = CalendarInfo() //I have problem in this line
}

class CalenderInfo {
private var id: UInt?
private var Date = Calendar
}

方向是正确的,但是你有一些错别字和编译问题。 这是可编译的版本:

import Foundation

class Vehicle {

    private var id: UInt?
    private var model = ""
    private var dateTimes: CalendarInfo = CalendarInfo()
}

class CalendarInfo {
    private var id: UInt?
    private var date: Calendar

    init() {
        id = 0
        date = Calendar(identifier: .gregorian)
    }
}

如果您需要 CalendarInfoVehicle 之间的聚合关系,并且如果我从图表和您所写的内容中正确理解它,您将需要 [= 之间的一对多关系=12=] 对象和 CalendarInfo

要实现您希望 Vehicle 定义中的 CalendarInfo 的集合类型,您可以通过执行以下操作来实现:

import Foundation

struct Vehicle {
  var id: UInt?
  var model: String
  var dateTimes: [CalendarInfo] //I have problem in this line
}

struct CalendarInfo {
  var id: UInt?
  var date: Date
}


let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

let myCalendar = [CalendarInfo(id: 1, date: dateFormatter.date(from:"2019-02-10")!),
                  CalendarInfo(id: 2, date: dateFormatter.date(from:"2019-02-15")!),
                  CalendarInfo(id: 3, date: dateFormatter.date(from:"2019-02-20")!)]

let myCar = Vehicle(id: 1, model: "Honda", dateTimes: myCalendar)

myCar.dateTimes.count == 3 //true