作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试为数字创建一个运算符。例如,将数字递增 10 的运算符。
这是我写的代码:
prefix operator +++{}
prefix operator +++<T>(inout operand: T) -> T{
operand += 10
return operand
}
我的 +=
运算符有错误。它需要数字操作数。所以我这样做了:
protocol Numeric {}
extension Int: Numeric {}
extension Float: Numeric {}
extension Double: Numeric {}
prefix operator +++ {}
prefix operator +++<T: Numeric>(inout operand: T) -> T {
operand += 10
return operand
}
但是编译失败。有人有什么想法吗?
最佳答案
这是一种更简洁、更好的方法,适用于从 Int8
到 CGFloat
的所有内容,并且仅使用标准库类型,因此您无需手动符合您自己的类型协议(protocol):
prefix operator +++ {}
prefix func +++<T where T: FloatingPointType, T.Stride: FloatingPointType>(inout operand: T) -> T {
operand = operand.advancedBy(T.Stride(10))
return operand
}
prefix func +++<T where T: IntegerArithmeticType, T: IntegerLiteralConvertible, T.IntegerLiteralType: IntegerLiteralConvertible>(inout operand: T) -> T {
operand = operand + T(integerLiteral: 10)
return operand
}
正如@Airspeed Velocity 指出的,您也可以这样做:
prefix operator +++ {}
prefix func +++<T: Strideable>(inout operand: T) -> T {
operand = operand.advancedBy(10)
return operand
}
关于swift - 如何在 Swift 中仅接受使用泛型的运算符的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31217868/
我是一名优秀的程序员,十分优秀!