【问题标题】:How to store a time interval (hour:minute:second) in Realm swift如何在Realm swift中存储时间间隔(小时:分钟:秒)
【发布时间】:2018-01-25 13:43:11
【问题描述】:

我目前正在创建一个锻炼计时器应用程序。 我想存储 just 创建的计时器对象的小时:分钟:秒。

我首先创建了一个 Time 对象:

class Time: Object {
    @objc dynamic var hour: Int = 0
    @objc dynamic var minute: Int = 0
    @objc dynamic var second: Int = 0
}

我用这个对象来表示时间间隔。我不喜欢这种方法的地方是我得到了一个单独的时间表,其中包含小时、分钟和秒列。

然后我想看看我是否可以存储一个元组 (Int, Int, Int) 来表示我的时间间隔。但是我收到一个警告,元组类型不能在 object-c 中表示。我还认为 Realm 可能不知道如何处理元组。

所以我的问题是。存储用户选择的小时、分钟和秒时间间隔的最佳方法是什么,而不必存储附加了无用日期的整个日期对象。

当然,我还需要能够从后备存储读取该时间间隔,以便将其应用于计时器。

编辑: 我想我也可以将其存储为秒的整数值,然后将结果解析为小时、分钟和秒

【问题讨论】:

  • 什么不是Date?它足够轻巧,因为它基本上只是一个时间戳。或者,您也可以只存储一个 TimeInterval ,它是 Double 的花哨类型别名?
  • 绝对将其存储为单个无符号 Int,以秒为单位。这样,您永远不会遇到不一致的地方,例如小时是 25,分钟是 -1。
  • @YoamFarges 如果有的话,为了清楚起见。我认为 Date 对象是存储日期的东西,而不一定是时间间隔。
  • @Gereon 是的,对 Uint 的呼吁很好。我认为这将是最好的方法。
  • 由于这个原因,TimeIntervalDouble 的内置别名。为什么你不能使用它?

标签: ios swift realm


【解决方案1】:

除非问题中没有描述其他先决条件,否则只需使用 Swift 的TimeInterval(类型别名为Double,Realm 支持)。我希望这是某个其他建模对象的属性(否则您只是存储任意数字)-假设它在 Workout 对象上。

class Workout: Object {

    @objc dynamic var interval: TimeInterval = 0

}

如果你想提取时间间隔的小时/分钟/秒,快速而肮脏的解决方案是extension Double { }func inSeconds() 等实用函数。但更好的解决方案是使用DateComponentsFormatter,它可以将您的TimeInterval 作为输入并吐出这些内容,同时为您处理更多的边缘情况。

【讨论】:

  • 我喜欢扩展的想法,因为我需要使用一个由小时:分钟:秒组成的元组,然后在选择器视图中显示。谢谢
  • 是的。如果您想显示该信息,请务必将其转换为元组,但 Realm 是您的数据存储 - 它不应该关心诸如此类的显示目的的事情。它只需要 TimeInterval。
  • 是的,扩展方法仅用于显示目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2019-11-08
相关资源
最近更新 更多