title: Swift 3 Ranges: Best Practices
body: <p>I downloaded the Xcode 8.0 beta yesterday and consequently Swift 3. The first thing I did was trying to update my project for Swift 3 and I nearly cried. One of the gravest changes is (in my opinion) the new management of Swifts <code>Range</code> struct, especially because the automatic conversion to the current Swift syntax does not do anything with the ranges.</p>
  
  <p><code>Range</code> is split into <code>Range</code>, <code>CountableRange</code>, <code>ClosedRange</code> and <code>CountableClosedRange</code> which <em>does</em> make sense when considering what is now possible when using ranges (though it's mostly fairly unnecessary).</p>
  
  <p>However: I have lots of functions accepting a <code>Range&lt;Int&gt;</code> as parameter or returning a <code>Range&lt;Int&gt;</code>. The problem is: I called these functions by <code>0..&lt;5</code> for example or <code>0...4</code> (because it's semantically more expressive sometimes). Of course, I could simply adjust these type of things. But why don't all these range types have a common interface? I'd have to overload every single function for each of these range types and it would perform the exact same operations every time.</p>
  
  <p>Are there any best practices yet for using ranges in Swift 3?</p>