【问题标题】:Proper way to save a DateInterval to Realm将 DateInterval 保存到领域的正确方法
【发布时间】:2018-08-20 00:03:34
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: swift realm dateinterval


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多