【发布时间】:2016-04-25 06:00:25
【问题描述】:
我正在浏览 Swift 2.2 附带的“Guided Tour”游乐场。在泛型章节中,你会得到这个非常麻烦的函数声明:
func anyCommonElements <T: SequenceType, U: SequenceType where
T.Generator.Element: Equatable,
T.Generator.Element == U.Generator.Element>
(lhs: T, _ rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])
该函数返回两个序列是否有任何共同的元素,这很简单。
本章的练习是修改函数以返回两个序列之间的公共元素的数组。从这里我知道该函数需要有一个返回类型,如
(lhs: T, _ rhs: U) -> [T.Generator.Element]
这似乎很简单,创建一个数组并将公共元素放入其中,然后返回它。但是到目前为止,本书中没有任何内容教会我如何制作[T.Generator.Element] 类型的新数组,所以我真的不知道如何进行。我很自然地认为这样的事情会起作用:
var result = [T.Generator.Element]()
但是,是的,这不会编译。那么我该如何解决这个练习呢? (这对于第一次引入泛型来说是不是有点高级?)
【问题讨论】: