A half-open interval from a lower bound up to, but not including, an upper bound.

@frozen struct Range<Bound> where Bound : Comparable


You create a Range instance by using the half-open range operator (..<).

let underFive = 0.0..<5.0

You can use a Range instance to quickly check if a value is contained in a particular range of values. For example:

// true
// false
// false

Range instances can represent an empty interval, unlike ClosedRange.

let empty = 0.0..<0.0
// false
// true

Using a Range as a Collection of Consecutive Values

When a range uses integers as its lower and upper bounds, or any other type that conforms to the Strideable protocol with an integer stride, you can use that range in a for-in loop or with any sequence or collection method. The elements of the range are the consecutive values from its lower bound up to, but not including, its upper bound.

for n in 3..<5 {
// Prints "3"
// Prints "4"

Because floating-point types such as Float and Double are their own Stride types, they cannot be used as the bounds of a countable range. If you need to iterate over consecutive floating-point values, see the stride(from:to:by:) function.



  • typealias Element

    A type representing the sequence’s elements.

  • typealias Index

    A type that represents a position in the range.

  • typealias Indices

    A type that represents the indices that are valid for subscripting the collection, in ascending order.

  • typealias Iterator

    A type that provides the sequence’s iteration interface and encapsulates its iteration state.

  • typealias SubSequence

    A collection representing a contiguous subrange of this collection’s elements. The subsequence shares indices with the original collection.


Instance Subscripts

Instance Properties

Instance Methods


Conforms To

Removed Members


  • init(Range<Bound>)

    Now that Range is conditionally a collection when Bound: Strideable, CountableRange is no longer needed. This is a deprecated initializer for any remaining uses of Range(countableRange).

    • Obsolete since Swift 5.0

  • init(start: Bound, end: Bound)
    • Deprecated

Instance Properties