是否可以提供仅适用于泛型类型的特定实例的扩展名?
例如,假设我要向Int?
添加方法,但不向任何其他Optional
添加方法。
这可能吗?
答案 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'