DispatchTimeInterval
не имеет свойства экземпляра с именем milliseconds
. Это enum
и имеет case
с именем milliseconds
. Вы можете добавить свойство milliseconds
в расширение. Но поскольку DispatchTimeInterval
может представлять интервал, измеряемый в микросекундах или наносекундах, вам нужно решить, как вы хотите преобразовать эти интервалы в миллисекунды. Он также может представлять бесконечный интервал, и вы должны решить, как преобразовать его в миллисекунды.
Вот простая реализация, которая округляет микро и нанос до нуля и возвращает Int.max
для бесконечного интервала:
extension DispatchTimeInterval {
var milliseconds: Int {
switch self {
case .seconds(let s): return s * 1_000
case .milliseconds(let ms): return ms
case .microseconds(let us): return us / 1_000 // rounds toward zero
case .nanoseconds(let ns): return ns / 1_000_000 // rounds toward zero
case .never: return .max
}
}
}
Вместо этого вы можете округлить до ближайшего и вернуть nil
для бесконечного интервала:
extension DispatchTimeInterval {
var milliseconds: Int? {
switch self {
case .seconds(let s): return s * 1_000
case .milliseconds(let ms): return ms
case .microseconds(let us): return (us + 500) / 1_000
case .nanoseconds(let ns): return (ns + 500_000) / 1_000_000
case .never: return nil
}
}
}