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