我创建了一个带有通用类型T的类,其中T应该只是数值型(如
CGFloat
、Double
、Int
等),并且应该能够转换为Double
。我尝试过几种类型,比如Numeric
和Equatable
,但这些类型仍然包含了太多的范围。当转换为Double
时,该类型应符合BinaryInteger
或BinaryFloatingPoint
中的任一类型,但我还没有找到一种方法让通用类型符合其中之一。class SomeClass<T:SomeNumberTypeThatAllowsConversionToDouble> {
var number: T
var doubleNumber: Double
init(number: T) {
self.number = number
self.doubleNumber = Double(number) //or some other function that converts from T to Double
}
}
我不希望出现两个独立的扩展SomeClass
,一个处理BinaryInteger
,另一个处理BinaryFloatingPoint
,因为这将违背我使用泛型的初衷。
Double
? - undefinedBinaryInteger
,另一个接受BinaryFloatingPoint
可能是一个解决方案,然而,很遗憾,Swift 类型系统目前无法处理这种类型约束(通用初始化方法专门针对已经是通用类型的情况)。 - undefined