Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 通用[T.Generator.Element]初始值设定项_Swift - Fatal编程技术网

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()]()
无法构造编译器spits
T.Generator.Element,因为它没有可访问的初始值设定项


知道如何初始化这样的数组吗?或者是否有其他明显的解决方案(我现在没有看到)?

您可以创建一个空数组(或字典),而无需调用其元素类型的初始值设定项:

var result : [T.Generator.Element] = []
(对于空字典,请使用
[:]


但是,编译器似乎可以接受您的第一次尝试(
[T.Generator.Element]()
),而不调用元素类型的初始值设定项。我推荐并询问苹果公司的官方答案。

谢谢!仍然不熟悉语法,我仍然过于依赖于
C++
,现在意识到
Swift
中的数组可能只是指向元素的指针,因此在创建时不需要指定构造函数。那么
[some_type]()
到底是做什么的呢?如果你从电视上观看Swift对话,你会发现数组的功能远不止这些。至于过于捆绑到C++,那么…他们说第一步是承认问题,这样你就走上了正确的道路
var result : [T.Generator.Element] = []