【发布时间】:2014-08-11 12:26:41
【问题描述】:
如何向泛型类型类添加扩展方法,并访问该类上定义的泛型类型以使方法类型安全?
以下方法会产生编译错误,因为 T 与类上定义的泛型类型不同。
extension Array {
mutating public func addTwo<T>(object: T) {
append(object)
append(object)
}
}
【问题讨论】:
如何向泛型类型类添加扩展方法,并访问该类上定义的泛型类型以使方法类型安全?
以下方法会产生编译错误,因为 T 与类上定义的泛型类型不同。
extension Array {
mutating public func addTwo<T>(object: T) {
append(object)
append(object)
}
}
【问题讨论】:
只需删除<T>。您可以在没有它的扩展范围内引用T,或等效的Element。
【讨论】:
Element,它是泛型定义中的类型别名。你的另一个问题是this one。
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(为了便于阅读)。
【讨论】: