Swift - 泛型类/结构的扩展?

时间:2014-08-10 22:37:05

标签: generics swift

如何将扩展方法添加到泛型类,并访问类上定义的泛型类型以使方法类型安全?

以下方法给出了编译错误,因为T与类上定义的泛型类型不同。

extension Array {
   mutating public func addTwo<T>(object: T) {
      append(object)
      append(object)
   }
}

2 个答案:

答案 0 :(得分:2)

只需删除<T>即可。如果没有它,您可以在扩展范围内引用T或等效Element

答案 1 :(得分:0)

Array的定义使用T作为类型参数;因此,您可以在可能添加到Array的任何扩展程序中访问它。在您的情况下,以下工作:

$ swift
Welcome to Swift!  Type :help for assistance.
  1> extension Array { 
  2.     mutating public func addTwo (obj: T) { append(obj); append(obj) } 
  3. }    
  4> class Foo {}
  5> var ar:[Foo] = []
ar: [Foo] = 0 values
  6> ar.addTwo(Foo())
  7> ar
$R0: [Foo] = 2 values {
  [0] = {}
  [1] = {}
}

请注意,由于Array的定义为typealias Element = T,您也可以使用Element(为了便于阅读)。