Contents

measureInterval(using:options:)

Measures and emits the time interval between events received from an upstream publisher.

Declaration

func measureInterval<S>(using scheduler: S, options: S.SchedulerOptions? = nil) -> Publishers.MeasureInterval<Self, S> where S : Scheduler

Parameters

  • scheduler:

    A scheduler to use for tracking the timing of events.

  • options:

    Options that customize the delivery of elements.

Return Value

A publisher that emits elements representing the time interval between the elements it receives.

Discussion

Use measureInterval(using:options:) to measure the time between events delivered from an upstream publisher.

In the example below, a 1-second Timer is used as the data source for an event publisher; the measureInterval(using:options:) operator reports the elapsed time between the reception of events on the main run loop:

cancellable = Timer.publish(every: 1, on: .main, in: .default)
    .autoconnect()
    .measureInterval(using: RunLoop.main)
    .sink { print("\($0)", terminator: "\n") }

// Prints:
//      Stride(magnitude: 1.0013610124588013)
//      Stride(magnitude: 0.9992760419845581)

The output type of the returned publisher is the time interval of the provided scheduler.

This operator uses the provided scheduler’s now property to measure intervals between events.

See Also

Controlling timing