[swift-evolution] [Idea] Replace enumerate() with something more explicit

Howard Lovatt howard.lovatt at gmail.com
Sat Apr 16 17:12:30 CDT 2016

I would suggest enumerate only for types that are subscriptable and that it
be defined as their (index, value) set that iterates in the collection's
indices order. IE:

    for index in collection.indices {
        let value = collection[index]


    for (index, value) in collection.enumerate {

are equivalent.

With the above definition I would suggest a name change to entries, since a
Dictionary's keys are not necessarily numbers, hence enumerate is

Nothing for Set since it isn't subscriptable.

On Saturday, 16 April 2016, Brent Royal-Gordon <brent at architechies.com>

> > I would suggest an alternative; changing Range so that it is indexed
> like an array, an Int from 0 to count - 1. Such that aRange[index] is
> defined as start + index * stride. This will eliminate the problems with
> enumerate. A Range's generic type would be constrained to be an Arithmetic
> type, see extended floating point proposal.
> That papers over the problem for Slice/Range specifically, but it doesn't
> fix it for types with non-integer indices, like Dictionary and Set.
> enumerate() is not meant to be used for the purpose to which it is usually
> put.

-- Howard.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160417/ba7691a1/attachment.html>

More information about the swift-evolution mailing list