Swift Guided Tour内的最后一项实验要求读者:
修改anyCommonElements(_:_ :)函数以生成一个函数 返回任意两个序列所包含的元素数组 常见的。
我修改的第一个快速通道:
func anyCommonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> [T.Generator.Element] {
var commonElements = [T.Generator.Element]()
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
commonElements.append(lhsItem)
}
}
}
return commonElements
}
我收到与Xcode 7.1.1中第2行的数组commonElements
初始化相关的错误:
无效使用'[]'来调用非函数类型的值 '[T.Generator.Element.Type]'
但是,如果我只是简单地更改初始化以使用在第2行创建空数组的缩写形式,一切都可以正常运行且没有错误:
func anyCommonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> [T.Generator.Element] {
var commonElements = Array<T.Generator.Element>() // Longhanded empty array
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
commonElements.append(lhsItem)
}
}
}
return commonElements
}
Swift数组的类型全部写为
Array<Element>
,其中 Element是允许存储数组的值的类型。您可以 还以简写形式将数组类型写为[Element]
。 虽然两种形式功能相同,但速记形式 是优选的,并且在参考本指南时使用 数组的类型。
(强调补充。)
如果它们“在功能上相同”,为什么我在上面的第一个例子中收到错误,显然是因为我用简写形式创建一个空数组?或者 - 或许更有可能 - 我是否缺乏对手头问题的基本了解?