[swift-evolution] [Pitch] Enumerate from offset

Dave Abrahams dabrahams at apple.com
Fri May 12 02:09:31 CDT 2017

on Sun May 07 2017, Pavol Vaskovic <swift-evolution at swift.org> wrote:

> (I forgot to reply-all to mailing list, sorry for double posting Ben!)
> On Thu, May 4, 2017 at 8:11 PM, Ben Cohen via swift-evolution <
> swift-evolution at swift.org> wrote:
>> On May 4, 2017, at 10:15 AM, Jaden Geller via swift-evolution <
>> swift-evolution at swift.org> wrote:
>> It's been suggested by a core team member that enumerated itself might not
>> hold its weight in the standard library. Instead, we ought to write
>> `zip(foo.indices, foo)` or `zip(0..., foo)`. It's easier for the caller to
>> see which side of the tuple stores the index and whether the index is an
>> integer or an actual index type. This use case seems to further support
>> this design since `zip(x…, foo)` and `zip(foo.indicies.drop(x), foo)` can
>> be easily written.
>> Yup, this is my personal preference. Enumerated has a number of
>> correctness and usability issues: slices aren’t zero based so you could
>> miss a potential trap at runtime, order of the two arguments is unclear
>> unlike the zip alternative, and it encourages people to write code using
>> integers rather than indices even one the latter is more expressive and
>> generalizes better if you ever want to make what you wrote generic.
>> Note also, since SE-0172 is now implemented on master, you can also write
>> zip(6…, myArray) if you want to alter the starting value.
> I have mentioned this in Alternatives considered section, with following
> comment:
>> Drawback of this approach is that you need to use free function zip,
> forcing a break in the chain of sequence operations, as there is currently
> no zipped method on Sequence.
>> If this is the preffered approach, we should consider removing the
> enumerated() method altogether, because the limited usefullness in its
> current state hardly justifies the space on API surface it occupies.

That is my preferred outcome.


More information about the swift-evolution mailing list