有什么方法可以用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 { }
// ...

扩展块为空,因为UInt8UInt16已经
静态max方法。
那么
class Test<T: IntegerTypeWithMax> {
}

let t = Test<UInt8>()

按预期编译和工作。

10-04 20:56