问题来自官方网站的 例子
页面上方提供 Playground 的下载。我的问题是页面上的一个练习,在页面最下方
Modify the anyCommonElements(_:_:) function to make a function that returns an array of the elements that any two sequences have in common.
我尝试新建泛型数组的方法是
var result = [T.Generator.Element]()
会报编译错误: invalid use of '()' to call a value of non-function type '[T.Generator.Element.Type]'
stackoverflow 上搜到了这个问题的 解答。我写在下面代码的注释里。
func commonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> Bool {
// 以下三行,前两行是 stackoverflow 提供的方法,单独都 work 。第三行是我的方法,会报错。
// var result = Array<T.Generator.Element>()
// var result: [T.Generator.Element] = []
var result = [T.Generator.Element]()
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
result.append(lhsItem)
}
}
}
return false
}
commonElements([1, 2, 3], [2, 3]) // result is [2, 3]
在另一份官方页面里提到
Array Type Shorthand Syntax
The type of a Swift array is written in full as Array<Element>, where Element is the type of values the array is allowed to store. You can also write the type of an array in shorthand form as [Element]. Although the two forms are functionally identical, the shorthand form is preferred and is used throughout this guide when referring to the type of an array.
这里提到 Array<Element>和[Element]是等价的。那么 Array<T.Generator.Element>和[T.Generator.Element]也应该是等价的。
为什么我的语句会报错呢?不知道问题出在哪里。