Realm不支持将DateInterval存储到数据库中。目前,我们的团队做了以下工作:

private let _intervalBegins = List<Date>()
private let _intervalEnds = List<Date>()

var dateIntervals: [DateInterval] {
    get {
        var intervals = [DateInterval]()
        for (i, startDate) in _intervalBegins.enumerated() {
            let endDate = _intervalEnds[i]
            intervals.append(DateInterval(start: startDate, end: endDate))
        }
        return intervals
    }

    set {
        _intervalBegins.removeAll()
        _intervalBegins.append(objectsIn: newValue.compactMap{ $0.start })
        _intervalEnds.removeAll()
        _intervalEnds.append(objectsIn: newValue.compactMap{ $0.end })
    }
}

有没有更“合适”的方法来做这件事?或许可以将开始日期和结束日期存储到一个属性/数据库列中?直接获取这些值,而不用像现在这样用另一个变量“解析”它们。
谢谢!

最佳答案

正如您所注意到的,Realmdoesn't support DateInterval,但是Realm能够保存您的自定义对象。在这种情况下,您可以创建自己的RealmDateInterval(或大约)并创建初始值设定项,它允许您从DateInterval创建对象:

dynamic var start: Date = Date()
dynamic var end: Date = Date()

convenience init(dateInterval: DateInterval) {
    self.init()
    self.start = dateInterval.start
    self.end = dateInterval.end
}

接下来,当您从领域检索RealmDateInterval时,您真正想要的是DateInterval。在这里,您可以创建一个桥函数,它可以将RealmDateInterval转换为DateInterval或使用convert func和
采用它来RealmDateInterval(即清楚地表明每个人RealmDateInterval都有特定的功能)。
protocol DateIntervalConvertible {
    func toDateInterval() -> DateInterval
}

extension RealmDateInterval: DateIntervalConvertible {

    func toDateInterval() -> DateInterval {
        return DateInterval(start: start, end: end)
    }

}

07-26 00:38