Swift IndexingGenerator仅在分配给var时工作

Swift IndexingGenerator仅在分配给var时工作,swift,Swift,在操场上阅读高级Swift手册(Xcode 7b 5),我发现: var a1 = [1,2,3] var a1gen = a1.generate() a1gen.next() // => 1 // but: a1.generate().next() // => value of type 'IndexingGenerator<[Int]>' has no member 'next' 但是仍然得到相同的错误一个索引生成器不是一个集合 [编辑]也

在操场上阅读高级Swift手册(Xcode 7b 5),我发现:

var a1 = [1,2,3]  
var a1gen = a1.generate()  
a1gen.next()  
// => 1

// but:  
a1.generate().next()  
// => value of type 'IndexingGenerator<[Int]>' has no member 'next'  

但是仍然得到相同的错误

一个
索引生成器
不是一个
集合


[编辑]也许我说得不够清楚。您可以为
GeneratorType
调用next,但是在
GeneratorType
上调用
generator
不是一个好主意,因为
GeneratorType
能够
生成本身是没有意义的:毕竟,它不是
集合,它是
GeneratorType
。因此,它是不可变的。

这是因为变量
a1gen
是用
var
声明的-它是可变的。而
next()
是一个变异函数。它需要一些稳定的东西来变异——一个可变的引用。
a1.generate().next()
中松散的
a1.generate()
不是这样的东西

这与这是合法的事实没有什么不同:

var d = [String:String]()
d["hey"] = "ho"
var i = 1
i++
但这不是:

[String:String]()["hey"] = "ho"
1++
或者这是合法的:

var d = [String:String]()
d["hey"] = "ho"
var i = 1
i++
但这不是:

[String:String]()["hey"] = "ho"
1++

谢谢,我想不出如何找到答案。不知道如何将其作为dup关闭,或者我是否可以…谢谢,这是有意义的,不知道我是否可以选择您的答案,因为这已经在前面的问题中得到了回答。我理解不变性,但仍然不清楚
a1.generate()
这是一个GeneratorType,它的类型与填充到var中的相同内容不同,从某种意义上说。我知道生成器必须是引用类型,所以必须是可变的。也许这只是一个误导性的错误。