在Swift中扩展泛型类型的具体实例

时间:2016-07-29 19:35:49

标签: swift generics

是否可以提供仅适用于泛型类型的特定实例的扩展名?

例如,假设我要向Int?添加方法,但不向任何其他Optional添加方法。

这可能吗?

1 个答案:

答案 0 :(得分:3)

有点儿。由于Optional是一种协议,因此您可以创建扩展并对其进行约束。但是,约束不能在类型上,但需要在协议上。

这有效:

extension Optional where Wrapped: SignedIntegerType {
    func test() -> Int {
        return 0
    }
}

然后你可以使用它:

let a:Int? = nil
a.test()

但是,如果您尝试这样做:

extension Optional where Wrapped: Int {
    func test() -> Int {
        return 0
    }
}

你会收到错误:

  

键入'Wrapped'约束到非协议类型'Int'