extension NSRange {
func my_intersection(with range: NSRange) -> NSRange? {
guard range.lowerBound <= self.upperBound ||
self.lowerBound <= range.upperBound else {
return nil
}
let start = max(self.lowerBound, range.lowerBound)
let end = min(self.upperBound, range.upperBound)
return NSRange(location: start, length: end - start)
}
}