Swift的GeneratorOf <t>疯狂初始化</t>

时间:2014-09-12 11:23:19

标签: cocoa swift

GeneratorOf创建通用Generator(和Sequence):

struct GeneratorOf<T> : Generator, Sequence {
    init(_ next: () -> T?)
    init<G : Generator where T == T>(_ self_: G)
    func next() -> T?
    func generate() -> GeneratorOf<T>
}

我不理解的是第二个init:

init<G : Generator where T == T>(_ self_: G)

为什么在地球上有必要陈述T == T ??

(_ self_: G)应该是什么意思?

非常感谢Swift的主要优点之一是比Objective C更简单的语法... :-P

1 个答案:

答案 0 :(得分:5)

这是Swift stdlib标头自动生成器中的一个错误。在解析类型时,它们会在某些不应该替换的类型中替换它们。这里的实际定义应该是:

init<G : Generator where Generator.Element == T>(_ self_: G)

但由于Generator.ElementT相同,因此该工具会替换它。 Apple一直在努力解决这个问题。

(_ self_: G)是标准语法,虽然这是我在其他地方没有看到过的不同寻常的风格,除了SequenceOf,这可能是由同一个人写的。我怀疑这只是开发人员如何命名变量,而不是具有更深层的含义。

请记住,stdlib标头不是“普通”标头。 Swift没有标题。苹果公司做了一个特殊的Apple技巧,允许一个。

Chris Lattner commented on this in the devforms.