swift - 通用 [T.Generator.Element] 初始值设定项

标签 swift

我正在尝试学习 Swift 并研究 Ch 中的示例。 1 苹果的书。最后一个练习让我很头疼,我正在尝试构建一个函数,该函数返回作为参数传递的两个序列的公共(public)元素。这是我试过的代码:

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
}

我唯一的问题是我不知道如何初始化result([T.Generator.Element] 类型),因此我不能在后面使用它将公共(public)元素附加到其中。我尝试了显而易见的

var result : [T.Generator.Element] = [T.Generator.Element]()

但是我收到错误找不到成员元素,如果我尝试

var result : [T.Generator.Element] = [T.Generator.Element()]()

编译器吐出T.Generator.Element cannot be constructed because it has no accessible initializers

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

最佳答案

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

var result : [T.Generator.Element] = []

(对于空字典,使用[:]。)

但是,您的第一次尝试 ([T.Generator.Element]()) 似乎应该为编译器所接受——它不会调用元素类型的初始值设定项。我推荐 filing a bug并询问 the developer forums看看苹果官方的回答是什么。

关于swift - 通用 [T.Generator.Element] 初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25214240/

相关文章:

swift - 为什么 iOS13 更改 NSAttributedString 中段落的字体系列 <p>

arrays - 使用 Parse 在 PFQuery 之外返回空数组的数组

ios - 将结构从 ObjC 传递到 Swift

ios - CloudKit:根据CKQueryNotification删除本地对象

ios - 从在线流音频 iOS 保存音频

swift - 我如何转换为像 : MyType<ConformingX> (ConformingX is a class that conforms to a protocol) 这样的通用类型

ios - SwiftUI - 在转换期间更新目标 View

swift firebase 嵌套子项计数

ios - 如何调整两个并排的 UI 按钮的大小

objective-c - 在 Xcode Swift 项目中使用 Objective C 框架