on Wed Mar 23 2016, Pedro Vieira <[email protected]> wrote: > Hi Swift developers, > I hereby present my first Swift proposal regarding the endIndex on > `Collections` and closed `Ranges`. I’ve searched the mailing list archives > for something similar to this but couldn’t find it, so I decided to come > forward. > > *The problem:* > I was recently working on a library and used a closed Range to define the > bounds of a board game and the tests that used its endIndex were all > failing. Started debugging it around and, to my complete surprise, found > out that the endIndex of the closed Ranges was always +1 from the value I > initially set. With this, I decided to dive into the Range source code and > discovered that all closed ranges are converted to half-open ones when > initialized: > a) 1..<10 stays 1..<10 (endIndex = 10) > b) 1...10 is converted to 1..<11 (endIndex = 11) > > To work around this behavior I had to subtract 1 every time I checked for > the endIndex, since I didn't want to use last! (force unwrapping) or > if-let, which ultimately polluted my code.
Please see the work currently underway in https://github.com/apple/swift/blob/swift-3-indexing-model/stdlib/public/core/ClosedRange.swift, which we intend to propose soon. ClosedRange becomes a separate type that represents its upperBound without modification. -- Dave _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
