swift 新建泛型数组的问题

2015-09-26 15:54:53 +08:00
 arbipher
问题来自官方网站的 [例子]( https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1)

页面上方提供 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 上搜到了这个问题的 [解答]( http://stackoverflow.com/questions/24027271/use-a-function-to-find-common-elements-in-two-sequences-in-swift)。我写在下面代码的注释里。

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]

在另一份[官方页面]( https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID105)里提到

> ### 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]也应该是等价的。

为什么我的语句会报错呢?不知道问题出在哪里。
4008 次点击
所在节点    Swift
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/223873

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX