时间
如果您
- 曾经写过类似的内容
let interval: TimeInterval = 10 * 60
来表示10分钟。
用法
展示
import Time
let tenMinutes = 10.minutes
let afterTenMinutes = Date() + 10.minutes
let tenMinutesAndSome = 10.minutes + 15.seconds
let tenMinutesInSeconds = 10.minutes.inSeconds
if 10.minutes > 500.seconds {
print("That's right")
}
基础
时间不仅仅是一系列 Double
类型转换函数。它的主要优势是所有时间单位都是 强类型 的。所以,例如
let tenMinutes = 10.minutes
在这个例子中,tenMinutes
实际上是 Interval<Minute>
类型(不要与 Foundation 的 TimeInterval
混淆)。共有七个时间单位可用,从纳秒到天。
public extension Double {
var seconds: Interval<Second> {
return Interval<Second>(self)
}
var minutes: Interval<Minute> {
return Interval<Minute>(self)
}
var milliseconds: Interval<Millisecond> {
return Interval<Millisecond>(self)
}
var microseconds: Interval<Microsecond> {
return Interval<Microsecond>(self)
}
var nanoseconds: Interval<Nanosecond> {
return Interval<Nanosecond>(self)
}
var hours: Interval<Hour> {
return Interval<Hour>(self)
}
var days: Interval<Day> {
return Interval<Day>(self)
}
}
操作
您可以在时间间隔上执行所有基本的算术运算,即便是不同单位的时间间隔
let interval = 10.minutes + 15.seconds - 3.minutes + 2.hours // Interval<Minute>
let doubled = interval * 2
let seconds = 10.seconds + 3.minutes // Interval<Second>
您也可以在这些操作中使用Date
let oneHourAfter = Date() + 1.hours
转换
时间间隔可以轻松转换
let twoMinutesInSeconds = 2.minutes.inSeconds // Interval<Second>
如果需要,您还可以将间隔转换为Foundation
的TimeInterval
let timeInterval = 5.minutes.timeInterval
您还可以使用converted(to:)
方法
let fiveSecondsInHours = 5.seconds.converted(to: Hour.self) // Interval<Hour>
// or
let fiveSecondsInHours: Interval<Hour> = 5.seconds.converted()
虽然在我的观点中,您很少需要这样做。
比较
您还可以比较不同的时间单位
50.minutes < 1.hour
创建您自己的时间单位
如果您需要创建自己的时间单位,这非常简单
public enum Week : TimeUnit {
public static var toTimeIntervalRatio: Double {
return 604800
}
}
现在您可以像使用其他任何时间单位一样使用它
let fiveWeeks = Interval<Week>(5)
为了方便起见,别忘了写那些方便的扩展
public enum Week : TimeUnit {
public static var toTimeIntervalRatio: Double {
return 604800
}
}
extension Interval {
public var inWeeks: Interval<Week> {
return converted()
}
}
extension Double {
public var weeks: Interval<Week> {
return Interval<Week>(self)
}
}
extension Int {
public var weeks: Interval<Week> {
return Interval<Week>(Double(self))
}
}
同样
也可用
- 获取转换率
let conversionRate = Hour.conversionRate(to: Second.self) // 3600.0
- 最大公约数集成
DispatchQueue.main.asyncAfter(after: 5.seconds) {
// do stuff
}
安装
时间可以通过Carthage使用。要安装,只需在Cartfile中写入即可
github "dreymonde/Time" ~> 1.0.0
时间也可通过 Cocoapods 提供的 "TimeIntervals" 获取。
pod 'TimeIntervals', '~> 1.0.0'
以及 Swift 包管理器
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/dreymonde/Time.git", majorVersion: 1, minor: 0),
]
)