TimeIntervals 1.0.1

TimeIntervals 1.0.1

测试测试通过
语言编程语言 SwiftSwift
许可证 MIT
发布时间上次发布2019年5月
SPM支持 SPM

Oleg Dreyman 维护。



时间

如果您

  • 曾经写过类似的内容
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> 类型(不要与 FoundationTimeInterval 混淆)。共有七个时间单位可用,从纳秒到天。

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>

如果需要,您还可以将间隔转换为FoundationTimeInterval

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),
    ]
)