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
答案 0 :(得分:5)
这是Swift stdlib标头自动生成器中的一个错误。在解析类型时,它们会在某些不应该替换的类型中替换它们。这里的实际定义应该是:
init<G : Generator where Generator.Element == T>(_ self_: G)
但由于Generator.Element
与T
相同,因此该工具会替换它。 Apple一直在努力解决这个问题。
(_ self_: G)
是标准语法,虽然这是我在其他地方没有看到过的不同寻常的风格,除了SequenceOf
,这可能是由同一个人写的。我怀疑这只是开发人员如何命名变量,而不是具有更深层的含义。
请记住,stdlib标头不是“普通”标头。 Swift没有标题。苹果公司做了一个特殊的Apple技巧,允许一个。