Swift2.2, [T]()调用append报错

 

//Swift2.2:
//修改anyCommonElements函数来创建一个函数,返回一个数组,内容是两个序列的共有元素。

func anyCommonElements2<T,U where T: SequenceType, U: SequenceType, T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> T {
        var result = [T.Generator.Element]()//在这里也会报错
        for lhsItem in lhs {
            for rhsItem in rhs {
                if lhsItem == rhsItem {
                    result.append(rhsItem) //在这里报错
                }
            }
        }
        
        return result
}

xcode7.3  swift2.2

result.append() 报 Cannot invoke "append" with an argument list of type "(T.Generator.Element)"

我是初学者。请大佬指点。多谢。

> var result:[T.Generator.Element] = []
> var result = [] as [T.Generator.Element]
> var result = Array< T.Generator.Element>()

该类已经是通用的,也无需使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]

因为result中只能包含相同类型的元素。

不要用var

直接声明类型,

是这样。明白了。多谢。