swift - 将 DateInterval 保存到 Realm 的正确方法

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

有没有更“合适”的方法来做到这一点?也许将开始结束 日期都存储到一个属性/数据库列中?并直接获取这些值,而无需像我们现在那样用另一个变量“解析”它们。

谢谢!

最佳答案

如您所见,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/

相关文章:

swift - 使 ViewController 背景模糊

ios - 我如何在第 2 代 SKSpriteNode 之间等待?

android - 重新启动应用程序时,realm-java 数据丢失

ios - 复合键问题 Realm Swift

php - 使用 DateInterval 和 DateTime::add 添加月份时会出现什么问题?

swift - 日期间隔格式化程序 : string of format "m:ss"

ios - 无法使用 JSON 类型的参数列表调用类型 'Int' 的初始值设定项

ios - HTTP 请求超时。 wifi 信号弱或服务器速度慢?

ios - Realm Swift 返回所有 nil 值的对象

PHP DateInterval 不返回该月的最后一天