自定义范围运算符
斯威夫特 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
)