将DateInterval保存到领域的正确方法

时间:2018-08-20 00:03:34

标签: swift realm dateinterval

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 })
    }
}

是否有更“适当”的方法来执行此操作?也许将开始结束日期都存储到一个属性/数据库列中?像我们现在所做的那样,直接获取这些值而无需“解析” 另一个变量。

谢谢!

1 个答案:

答案 0 :(得分:0)

您注意到,领域doesn't support DateInterval,但是领域能够保存您的自定义对象。在这种情况下,您可以创建自己的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
}

接下来的事情是,当您从Realm中检索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)
    }

}
相关问题