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