Я пытаюсь найти способ определить, попадает ли значение в Range
в Swift.
В основном то, что я пытаюсь сделать, это адаптировать один из примеров инструкции switch, чтобы сделать что-то вроде этого:
let point = (1, -1)
switch point {
case let (x, y) where (0..5).contains(x):
println("(\(x), \(y)) has an x val between 0 and 5.")
default:
println("This point has an x val outside 0 and 5.")
}
Насколько я могу судить, нет никакого встроенного способа сделать то, что делает мой воображаемый метод .contains
.
Итак, я попытался расширить класс Range
. Однако я столкнулся с проблемами с дженериками. Я не могу расширить Range<Int>
, поэтому мне пришлось попытаться расширить Range
.
Ближайшим я получил это, но он не работает, поскольку >=
и <=
не определены для ForwardIndex
extension Range {
func contains(val:ForwardIndex) -> Bool {
return val >= self.startIndex && val <= self.endIndex
}
}
Как мне добавить метод .contains
в Range
? Или есть лучший способ определить, попадает ли значение в диапазон?
Edit2: Это, похоже, работает для расширения Range
extension Range {
func contains(val:T) -> Bool {
for x in self {
if(x == val) {
return true
}
}
return false
}
}
var a = 0..5
a.contains(3) // true
a.contains(6) // false
a.contains(-5) // false
Меня очень интересует оператор ~ =, упомянутый ниже; глядя на это сейчас.