diff --git a/src/swift/Time.swift b/src/swift/Time.swift index 709dac82b..46a71d6f8 100644 --- a/src/swift/Time.swift +++ b/src/swift/Time.swift @@ -110,12 +110,16 @@ public func -(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTim } public func +(time: DispatchTime, seconds: Double) -> DispatchTime { - let t = CDispatch.dispatch_time(time.rawValue, Int64(seconds * Double(NSEC_PER_SEC))) + let interval = seconds * Double(NSEC_PER_SEC) + let t = CDispatch.dispatch_time(time.rawValue, + interval.isInfinite || interval.isNaN ? Int64.max : Int64(interval)) return DispatchTime(rawValue: t) } public func -(time: DispatchTime, seconds: Double) -> DispatchTime { - let t = CDispatch.dispatch_time(time.rawValue, Int64(-seconds * Double(NSEC_PER_SEC))) + let interval = -seconds * Double(NSEC_PER_SEC) + let t = CDispatch.dispatch_time(time.rawValue, + interval.isInfinite || interval.isNaN ? Int64.min : Int64(interval)) return DispatchTime(rawValue: t) } @@ -130,11 +134,15 @@ public func -(time: DispatchWallTime, interval: DispatchTimeInterval) -> Dispatc } public func +(time: DispatchWallTime, seconds: Double) -> DispatchWallTime { - let t = CDispatch.dispatch_time(time.rawValue, Int64(seconds * Double(NSEC_PER_SEC))) + let interval = seconds * Double(NSEC_PER_SEC) + let t = CDispatch.dispatch_time(time.rawValue, + interval.isInfinite || interval.isNaN ? Int64.max : Int64(interval)) return DispatchWallTime(rawValue: t) } public func -(time: DispatchWallTime, seconds: Double) -> DispatchWallTime { - let t = CDispatch.dispatch_time(time.rawValue, Int64(-seconds * Double(NSEC_PER_SEC))) + let interval = seconds * Double(NSEC_PER_SEC) + let t = CDispatch.dispatch_time(time.rawValue, + interval.isInfinite || interval.isNaN ? Int64.min : Int64(interval)) return DispatchWallTime(rawValue: t) }