Вы можете расширить класс Range для этого использования или использовать пересечение в классе CGRect.
// Использование CGRect
var r1 = CGRect(x: 4.8, y: 0, width: 1.8, height: 1)
var r2 = CGRect(x: 5.8, y: 0, width: 2, height: 1)
var r3 = CGRect(x: 6, y: 0, width: 0.8, height: 1)
r1.intersection(r2).intersection(r3)
// Использование ClosedRange
extension CountableClosedRange where Bound == Int {
func intersection(_ range: CountableClosedRange<Int>) -> CountableClosedRange<Int>? {
if(self.lowerBound >= range.upperBound) {
return nil;
}
if(self.upperBound <= range.lowerBound) {
return nil;
}
return CountableClosedRange(uncheckedBounds:
(lower: self.lowerBound > range.lowerBound ?
self.lowerBound
:range.lowerBound,
upper: self.upperBound < range.upperBound ?
self.upperBound
:range.upperBound))
}
}
func convertTime(h:Int, m: Int = 0) -> Int {
return m+h*60;
}
var range1 = CountableClosedRange(uncheckedBounds: (lower: 48 , upper: 56))
var range2 = CountableClosedRange(uncheckedBounds: (lower: 53 , upper: 55))
var range3 = CountableClosedRange(uncheckedBounds: (lower: 45 , upper: 54))
var range4 = CountableClosedRange(uncheckedBounds: (lower: 47 , upper: 64))
let arr = [range2,range3,range4]
var resultRange:CountableClosedRange<Int>? = range1
for item in arr {
resultRange = resultRange?.intersection(item)
}