gpt4 book ai didi

swift - 自定义范围运算符 - Swift 4.1

转载 作者:行者123 更新时间:2023-11-28 12:01:01 26 4
gpt4 key购买 nike

自定义范围运算符

swift 4.1,Xcode 9.3

我希望制作两个自定义范围运算符:<.. , <.<


1。 <..

  • 这个运算符将是 ..< 的逆运算范围运算符。

我的尝试:

infix operator <.. : RangeFormationPrecedence

public func <.. (lhs: Int, rhs: Int) -> Range {
return lhs - 1 ... rhs
}

错误:

1. Custom Range Operator Error

注意:我还发现了另外 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
}

错误:

2. Custom Range Operator Error

注意:我还发现了另外 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)


最佳答案

<..<.<不是运算符的有效标识符。你会发现详见 Operators在 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 .

关于swift - 自定义范围运算符 - Swift 4.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com