有什么方法可以用swift来描述具有IntegerType
属性的max
吗?(类似于go中的隐式接口)
没有描述max
属性的协议,即使我创建了一个属性,IntegerType
也不会显式地实现它。
所以基本上我要找的是:
class Test<T: IntegerType where ?> { // <- ? = something like 'has a "max: Self"' property
}
let t = Test<UInt8>()
或者像这样:
implicit protocol IntegerTypeWithMax: IntegerType {
static var max: Self { get }
}
class Test<T: IntegerTypeWithMax> {
}
let t = Test<UInt8>()
最佳答案
swift编译器不会自动推断协议的一致性
即使类型实现了所有必需的属性/方法。所以如果你定义
protocol IntegerTypeWithMax: IntegerType {
static var max: Self { get }
}
您仍然需要使您感兴趣的整数类型
遵守该议定书:
extension UInt8 : IntegerTypeWithMax { }
extension UInt16 : IntegerTypeWithMax { }
// ...
扩展块为空,因为
UInt8
,UInt16
已经静态
max
方法。那么
class Test<T: IntegerTypeWithMax> {
}
let t = Test<UInt8>()
按预期编译和工作。