Пользовательские операторы диапазона
Swift 4.1, Xcode 9.3
Я хочу создать два пользовательских оператора диапазона: <..
, <.<
1. <..
- Этот оператор будет своего рода обратным оператору диапазона
..<
.
Моя попытка:
infix operator <.. : RangeFormationPrecedence
public func <.. (lhs: Int, rhs: Int) -> Range {
return lhs - 1 ... rhs
}
Ошибка:
Примечание: Я также получаю информацию о дополнительных 22 ошибках времени компиляции, связанных с фактическим объявлением самого пользовательского оператора (<..
).
Идеальное использование:
for i in 1<..9 {
print(i, terminator: " ")
}
// Prints "0 1 2 3 4 5 6 7 8 9"
2. <.<
- Я хочу сделать комбинацию из моего предыдущего пользовательского оператора диапазона.
<..
и ..<
Моя попытка:
infix operator <.< : RangeFormationPrecedence
public func <.< (lhs: Int, rhs: Int) -> Range {
return lhs - 1 ..< rhs
}
Ошибка:
Примечание: Я также получаю информацию о дополнительных 22 ошибках времени компиляции, связанных с фактическим объявлением самого пользовательского оператора (<.<
).
Идеальное использование:
for i in 1<.<10 {
print(i, terminator: " ")
}
// Prints "0 1 2 3 4 5 6 7 8 9"
Как мне это сделать?
Кроме того, какой тип Range
я должен возвращать?
Наконец, есть ли какие-либо предварительные условия, которые необходимо добавить к самим операторам настраиваемого диапазона для обеспечения безопасности?
Обновление
Я решил создать два оператора (1x постфикс, 1x инфикс) для достижения одной из следующих целей:
postfix operator <
public postfix func < <T: Numeric>(n: T) -> T { return n - 1 }
infix operator .< : RangeFormationPrecedence
public func .< <T: Numeric>(lhs: T, rhs: T) -> CountableRange<T> {
return lhs ..< rhs
}
Тогда я могу сделать:
for i in 1<.<10 {
print(I, terminator: " ")
}
//Prints "0 1 2 3 4 5 6 7 8 9"
Предупреждение: У меня не может быть пробела между числами и операторами (т.е. 1 <.< 10
)