Swift 通用[T.Generator.Element]初始值设定项
我正在努力学习Swift 通用[T.Generator.Element]初始值设定项,swift,Swift,我正在努力学习Swift,并学习苹果书第一章中的例子。上一个练习让我很头疼,我正在尝试构造一个函数,返回作为参数传递的两个序列的公共元素。以下是我尝试的代码: func anyCommonElements <T, U where T: SequenceType, U: SequenceType, T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, rhs:
Swift
,并学习苹果书第一章中的例子。上一个练习让我很头疼,我正在尝试构造一个函数,返回作为参数传递的两个序列的公共元素。以下是我尝试的代码:
func anyCommonElements <T, U where T: SequenceType, U: SequenceType, T.Generator.Element:
Equatable, T.Generator.Element == U.Generator.Element>
(lhs: T, rhs: U) -> [T.Generator.Element] {
var result : [T.Generator.Element] // how to default-initialize it?
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
result.append(lhsItem)
}
}
}
return result
}
然而,我得到了一个错误找不到成员元素,如果我尝试
var result : [T.Generator.Element] = [T.Generator.Element()]()
无法构造编译器spitsT.Generator.Element,因为它没有可访问的初始值设定项
知道如何初始化这样的数组吗?或者是否有其他明显的解决方案(我现在没有看到)?您可以创建一个空数组(或字典),而无需调用其元素类型的初始值设定项:
var result : [T.Generator.Element] = []
(对于空字典,请使用[:]
)
但是,编译器似乎可以接受您的第一次尝试([T.Generator.Element]()
),而不调用元素类型的初始值设定项。我推荐并询问苹果公司的官方答案。谢谢!仍然不熟悉语法,我仍然过于依赖于C++
,现在意识到Swift
中的数组可能只是指向元素的指针,因此在创建时不需要指定构造函数。那么[some_type]()
到底是做什么的呢?如果你从电视上观看Swift对话,你会发现数组的功能远不止这些。至于过于捆绑到C++,那么…他们说第一步是承认问题,这样你就走上了正确的道路
var result : [T.Generator.Element] = []