Swift2 GeneratorOfOne.next()发生错误:不能在不可变值上使用变异成员:函数调用返回不可变值

时间:2016-08-18 09:35:43

标签: arrays swift generator

我对swif2 AnyGenerator和GeneratorOfOne非常困惑。当我写下面的代码时

AnyGenerator(GeneratorOfOne([1,2,3])).next()

编译是正确的。 但是没有使用AnyGenerator

GeneratorOfOne([1,2,3]).next()

代码无法编译。错误是

  

不能在不可变值上使用mutating成员:函数调用返回   不可变的价值。

2 个答案:

答案 0 :(得分:1)

您收到错误是因为nextmutating方法,需要在变量(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()