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

Generics Swift-泛型类型类/结构上的扩展?,generics,swift,Generics,Swift,如何向泛型类型的类添加扩展方法,并访问该类上定义的泛型类型以使方法类型安全 以下方法给出了一个编译错误,因为T不是类上定义的相同泛型类型 extension Array { mutating public func addTwo<T>(object: T) { append(object) append(object) } } 扩展数组{ 变异公共函数addTwo(对象:T){ 附加(对象) 附加(对象) } } 只需删除。您可以在扩展范围内引用

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

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

extension Array {
   mutating public func addTwo<T>(object: T) {
      append(object)
      append(object)
   }
}
扩展数组{
变异公共函数addTwo(对象:T){
附加(对象)
附加(对象)
}
}

只需删除
。您可以在扩展范围内引用
T
,或等效地引用
元素
,而不引用它。

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

$ 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] = {}
}

请注意,由于
数组
的定义具有
typealias Element=T
,因此也可以使用
Element
(为了可读性)

可能重复的为什么是T?是因为他们使用了T键作为泛型类型吗?如果他们用K代替,我会用K?因此,基本上我需要查看源代码,以便查看泛型类型是什么?是否可以接受类型为T的参数,该参数也是可等式的?因此,您可能更喜欢使用
元素
,它是泛型定义中的类型别名。你的另一个问题是。