gpt4 book ai didi

swift - 如何在 Swift 中仅接受使用泛型的运算符的数字?

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:38 24 4
gpt4 key购买 nike

我正在尝试为数字创建一个运算符。例如,将数字递增 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
}

但是编译失败。有人有什么想法吗?

最佳答案

这是一种更简洁、更好的方法,适用于从 Int8CGFloat 的所有内容,并且仅使用标准库类型,因此您无需手动符合您自己的类型协议(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/

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