Skip to main content
Code Review

Return to Revisions

2 of 7
Simplified control flow
Milos
  • 639
  • 5
  • 18

Martin's excellent insight into the nature of the problem got me thinking if we could do any better than extension Range where Element : IntegerType. Here is one possibility:

public extension Range where Element : Comparable {
 
 @warn_unused_result
 public func intersect(other: Range) -> Range {
 guard endIndex > other.startIndex else {
 return endIndex..<endIndex
 }
 guard other.endIndex > startIndex else {
 return startIndex..<startIndex
 }
 let s = other.startIndex > startIndex ? other.startIndex : startIndex
 let e = other.endIndex < endIndex ? other.endIndex : endIndex
 return s..<e
 }
}

This at least passes Martin's range of string test:

let r1 = "fπŸ‡©πŸ‡°oo".rangeOfString("πŸ‡©πŸ‡°")! // 1..<5
let r2 = "baπŸ‡¨πŸ‡°r".rangeOfString("πŸ‡¨πŸ‡°")! // 2..<6
let r = r1.intersect(r2) // 2..<5
Milos
  • 639
  • 5
  • 18
default

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /