【问题标题】:cannot invoke 'append' with an argument list of type '(T)'无法使用类型为“(T)”的参数列表调用“附加”
【发布时间】:2017-02-27 02:10:36
【问题描述】:

在最新的 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)'
    }
}

【问题讨论】:

    标签: arrays swift generics


    【解决方案1】:

    类已经是泛型的了,push 也不需要再泛型了

    class MyStack<T> {
        var stack1 = [T]()
    
        func push(value: T) {
            stack1.append(value)
        }
    }
    

    push 被声明为push&lt;T&gt; 时,泛型参数会覆盖类中定义的参数。所以,如果我们要重命名泛型参数,我们会得到

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

    这样呈现,我们不能在[T1] 中推送T2 是有道理的。

    【讨论】:

    • 非常感谢!真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多