我对swif2 AnyGenerator和GeneratorOfOne非常困惑。当我写下面的代码时
AnyGenerator(GeneratorOfOne([1,2,3])).next()
编译是正确的。 但是没有使用AnyGenerator
GeneratorOfOne([1,2,3]).next()
代码无法编译。错误是
不能在不可变值上使用mutating成员:函数调用返回 不可变的价值。
答案 0 :(得分:1)
您收到错误是因为next
是mutating
方法,需要在变量(var
)上调用。在常量(let
)上调用它不会起作用。
编译:
var generator = GeneratorOfOne([1,2,3])
generator.next()
相同的next
调用适用于AnyGenerator
,因为在该结构上该方法不是mutating
。以下是讨论中两种结构的定义的摘录:
public struct AnyGenerator<Element> : GeneratorType {
.................................
public func next() -> Element?
}
public struct GeneratorOfOne<Element> : GeneratorType, SequenceType {
.................................
public mutating func next() -> Element?
}
答案 1 :(得分:0)
根据docs next()
是变异函数。
你必须保持var引用它:
var generator = GeneratorOfOne([1,2,3])
let next = generator.next()