如何将扩展方法添加到泛型类,并访问类上定义的泛型类型以使方法类型安全?
以下方法给出了编译错误,因为T与类上定义的泛型类型不同。
extension Array {
mutating public func addTwo<T>(object: T) {
append(object)
append(object)
}
}
答案 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
(为了便于阅读)。