首页 > 解决方案 > 如何在 Swift 中使“CGFloat”符合“BinaryInteger”?

问题描述

我有一个名为test的函数,它接受符合BinaryFloatingPoint. 在某些情况下,我还必须向Int函数提供类型 vale,但 Swift 抱怨它需要Int符合BinaryFloatingPoint. 所以我试图使Int符合BinaryFloatingPoint,但我不知道这是否正确,或者我怎样才能以 Int 符合 BinaryFloatingPoint 的方式完成扩展。


我的目标:我希望我的函数能够处理数字,但使用数字作为协议是不够的!它不是那样工作的,它需要BinaryFloatingPoint才能工作!但另一方面,它无法处理Int


func test<T: Numeric>(value: ClosedRange<T>) {
   
    let someWork: CGFloat = CGFloat(value.upperBound - value.lowerBound)
    
}

用例:

let value: ClosedRange<Int> = -100...100
test(value: value)

x代码错误:

Global function 'test(value:)' requires that 'Int' conform to 'BinaryFloatingPoint'

标签: swift

解决方案


答案就在这里,在不同的函数中使用BinaryFloatingPointBinaryInteger

func test<T: BinaryFloatingPoint>(value: ClosedRange<T>) {
   
    let someWork: CGFloat = CGFloat(value.upperBound - value.lowerBound)
    
    print(someWork)
    
}

func test<T: BinaryInteger>(value: ClosedRange<T>) {

    let someWork: CGFloat = CGFloat(value.upperBound - value.lowerBound)

    print(someWork)

}

推荐阅读