无法调用'追加'使用类型'(T)'的参数列表

时间:2017-02-27 02:10:36

标签: arrays swift generics

尝试在最新的游乐场中编写具有泛型类型的堆栈时,出现了这个奇怪的错误。 我真的不明白这里有什么问题,有人可以向我解释为什么我会收到这个错误吗?

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)'
    }
}

1 个答案:

答案 0 :(得分:1)

该类已经是通用的,也不需要推送泛型

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]