在Swift中返回struct的可变版本

时间:2014-06-12 03:03:49

标签: swift

我有一个使用return self

生成结构本身的方法

不幸的是我得到了类型"结构名称"的不可变值。只有可变成员名称'方法名称'错误。

如何返回结构是可变的?

1 个答案:

答案 0 :(得分:8)

你可以很好地改变结构,但你必须使用mutating注释这些变异方法。

struct SomeStruct {
    var x:Int = 0
    mutating func increment() {
        x++;
    }
}

修改

让我在这里作一些澄清。结构可以变异:

var structA = SomeStruct()
structA.x // 0
structA.increment()
structA.x // 1

但前提是你宣称它为var。这不会编译:

let structA = SomeStruct()
// structA.increment() // Compile error

现在,当您执行something.methodReturningStruct().mutatingMethod()之类的操作时,methodReturningStruct()实际上将返回原始结构的副本(凭借值类型)。但是由于你没有将它分配给var,它将被隐含地视为常量(即let),因此你会得到编译器错误。

你仍然可以做同样的事情,但你只需告诉swift将结构用作var

var structB = something.methodReturningStruct()
structB.mutatingMethod()