Swift IndexingGenerator仅在分配给var时工作
在操场上阅读高级Swift手册(Xcode 7b 5),我发现: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' 但是仍然得到相同的错误一个索引生成器不是一个集合 [编辑]也
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中的相同内容不同,从某种意义上说。我知道生成器必须是引用类型,所以必须是可变的。也许这只是一个误导性的错误。