---
title: "measureInterval(using:options:)"
framework: combine
role: symbol
role_heading: Instance Method
path: "combine/publisher/measureinterval(using:options:)"
---

# measureInterval(using:options:)

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

## Declaration

```swift
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

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

## Discussion

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

- [debounce(for:scheduler:options:)](combine/publisher/debounce(for:scheduler:options:).md)
- [delay(for:tolerance:scheduler:options:)](combine/publisher/delay(for:tolerance:scheduler:options:).md)
- [throttle(for:scheduler:latest:)](combine/publisher/throttle(for:scheduler:latest:).md)
- [timeout(_:scheduler:options:customError:)](combine/publisher/timeout(_:scheduler:options:customerror:).md)
