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 })
}
}
有没有更“合适”的方法来做到这一点?也许将开始 和结束 日期都存储到一个属性/数据库列中?并直接获取这些值,而无需像我们现在那样用另一个变量“解析”它们。
谢谢!
最佳答案
如您所见,Realm doesn'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
}
接下来,当您从 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)
}
}
关于swift - 将 DateInterval 保存到 Realm 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51922760/