返回Swift中结构的可变版本

返回Swift中结构的可变版本,swift,Swift,我有一个方法,它使用返回self 不幸的是,我得到的“Struct name”类型的不可变值只有可变成员名“method name”错误 如何返回使结构可变?可以很好地对结构进行变异,但必须使用变异对这些变异方法进行注释 struct SomeStruct { var x:Int = 0 mutating func increment() { x++; } } 编辑: 让我在这里澄清一下。结构可以变异: var structA = SomeStruct(

我有一个方法,它使用
返回self

不幸的是,我得到的“Struct name”类型的不可变值只有可变成员名“method name”错误


如何返回使结构可变?

可以很好地对结构进行变异,但必须使用
变异
对这些变异方法进行注释

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()

显示您的代码和完整的错误消息(同时指出哪一行)编辑问题和添加代码您不能直接从另一个方法的返回中修改它们
structA.methodReturningSelf().mutatingMethod()
这是因为您链接了它。编译器看到
methodReturningSelf()
返回原始
structA
的一个副本,但您直接在其上调用了一个方法,而没有分配它(使新副本以及对
mutatingMethod()
的调用无效。这将正常工作:
var structB=structA.methodReturningSelf();structB.mutatingMethod()
。注意
var
的用法,而不是
let
。不过,我在最初的问题中没有看到任何关于链接的内容。如果是这样,那就不可能了,正如你所说。但我想OP只是想在从函数返回结构后对其进行变异。我是基于他和他得到一个不可变值er的事实但我想这是由OP来决定他真正的意思:)我认为有两个答案是好的。实际上你的编辑涵盖了所有内容,我会删除我的