gpt4 book ai didi

swift - 检查 Swift 通用数字是否高于其最大值的特定百分比

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

我正在尝试为通用类编写扩展。我希望能够确定 T 类型的变量的值是否高于其最大值的特定百分比。

我在 a) 弄清楚如何获取类型的最大值,以及 b) 正确转换类型以进行比较时遇到了问题。

public class CustomClass<T:BinaryInteger> { 
public var someValue:T
...
}
extension CustomClass {
func isOver(threshold:Float) {
// defined for threshold between -1 and +1
let convertedThreshold:Float = threshold * Float(T.MAX_VALUE)
return self.someValue > T(clamping: convertedThreshold)
}
}

现在我一直在获取类型为 T 的变量的最大值。 BinaryInteger docs提到 T.minT.max 但这些似乎实际上没有定义。

为清楚起见:

如果阈值是 0.5 并且 T 是类型 UInt8 我想返回 true 如果变量是超过 127。但是如果 TUInt16 类型,如果变量超过 32,767,我想返回 true

最佳答案

作为JeremyP said,您需要将 T 限制为 FixedWidthInteger协议(protocol),它具有必需的 max 属性。

对于无符号整数类型,与Float(或Double)的对话可以通过最大的无符号整数类型UInt64来完成:

extension CustomClass where T: UnsignedInteger {
func isOver(threshold: Float) -> Bool {
return Float(UInt64(self.someValue)) > threshold * Float(UInt64(T.max))
}
}

(对于有符号整数类型,通过 Int64)。

完整的独立示例:

public class CustomClass<T:FixedWidthInteger> {
public var someValue: T = 0
}

extension CustomClass where T: UnsignedInteger {
func isOver(threshold: Float) -> Bool {
return Float(UInt64(self.someValue)) > threshold * Float(UInt64(T.max))
}
}

let x = CustomClass<UInt16>()
x.someValue = 50_000
print(x.isOver(threshold: 0.5)) // true

关于swift - 检查 Swift 通用数字是否高于其最大值的特定百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48305558/

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