在最新的playground中尝试使用泛型类型编写堆栈时出现了这个奇怪的错误。
我真的不明白这是怎么回事,有人能解释一下我为什么会犯这个错误吗?
class MyStack<T> {
var stack1 = [T]()
func push<T>(value: T) {
stack1.append(value) // Error: cannot invoke 'append' with an argument list of type '(T)'
}
}
最佳答案
该类已经是泛型的,不需要使push也成为泛型的
class MyStack<T> {
var stack1 = [T]()
func push(value: T) {
stack1.append(value)
}
}
当
push
声明为push<T>
时,泛型参数将重写在类上定义的参数。所以,如果我们重命名泛型参数,我们将得到class MyStack<T1> {
var stack1 = [T1]()
func push<T2>(value: T2) {
stack1.append(value) // Error: cannot invoke 'append' with an argument list of type '(T2)'
}
}
这样呈现,我们不能在
T2
中推[T1]
,这是有意义的。