Generics Swift-泛型类型类/结构上的扩展?
如何向泛型类型的类添加扩展方法,并访问该类上定义的泛型类型以使方法类型安全 以下方法给出了一个编译错误,因为T不是类上定义的相同泛型类型Generics Swift-泛型类型类/结构上的扩展?,generics,swift,Generics,Swift,如何向泛型类型的类添加扩展方法,并访问该类上定义的泛型类型以使方法类型安全 以下方法给出了一个编译错误,因为T不是类上定义的相同泛型类型 extension Array { mutating public func addTwo<T>(object: T) { append(object) append(object) } } 扩展数组{ 变异公共函数addTwo(对象: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的参数,该参数也是可等式的?因此,您可能更喜欢使用元素
,它是泛型定义中的类型别名。你的另一个问题是。