有没有办法在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>()
答案 0 :(得分:1)
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>()
编译并按预期工作。