自定义范围运算符
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 ?
最后,是否有任何先决条件需要添加到自定义范围操作符本身,以确保安全?
更新
我决定创建两个操作符(1xpostfix,1xinfix)来实现以下目标之一:
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"警告:i不能在数字和运算符之间有一个空格(即1 <.< 10)
发布于 2018-05-01 16:02:51
<..和<.<不是运算符的有效标识符。您可以在Swift语言引用中找到运算符中的详细信息。
模拟已存在的
extension Strideable where Self.Stride : SignedInteger {
public static func ... (minimum: Self, maximum: Self) -> CountableClosedRange<Self>
}运算符,您的第一个自定义运算符可以实现为
infix operator <!! : RangeFormationPrecedence
extension Strideable where Self.Stride : SignedInteger {
public static func <!! (minimum: Self, maximum: Self) -> CountableClosedRange<Self> {
return minimum.advanced(by: -1) ... maximum
}
}示例:
for i in 1<!!9 { print(i, terminator: " ") }
// 0 1 2 3 4 5 6 7 8 9第二个操作符可以以类似的方式实现,使用CountableRange而不是CountableClosedRange。
https://stackoverflow.com/questions/50118189
复制相似问题