on Fri Apr 15 2016, Brent Royal-Gordon <swift-evolution@swift.org> wrote:

>> 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.

It also breaks an important “law of slicing,” that there is an index
correspondence between the slice and the outer collection.  That makes
it possible, e.g, to do

   let firstOne = c.index(of: something)
   let secondOne = c[firstOne..<c.endIndex].index(of: somethingElse)
   doSomethingWith(c[firstOne..<secondOne])

-- 
Dave

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to