Swift隐式协议

时间:2015-06-21 10:37:20

标签: swift generics

有没有办法在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>()

1 个答案:

答案 0 :(得分:1)

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>()

编译并按预期工作。