Swift 二进制运算符+;=不能应用于两个整数操作数

Swift 二进制运算符+;=不能应用于两个整数操作数,swift,struct,int,Swift,Struct,Int,我正在创建一个简单的结构 struct Expenses { var totalExpenses:Int = 0 func addExpense(expense: Int) { totalExpenses += expense } } 它在行的开头产生错误totalExpenses+=expense 错误消息是 二进制运算符+=不能应用于两个整数操作数 为什么我会收到错误消息以及如何解决此问题?您需要指定addExpense是一个变异函数,如下所示:

我正在创建一个简单的结构

struct Expenses {

    var totalExpenses:Int = 0

    func addExpense(expense: Int) {
        totalExpenses += expense
    }
}
它在行的开头产生错误
totalExpenses+=expense
错误消息是

二进制运算符+=不能应用于两个整数操作数


为什么我会收到错误消息以及如何解决此问题?

您需要指定
addExpense
是一个
变异
函数,如下所示:

struct Expenses {
    var totalExpenses:Int = 0

    mutating func addExpense(expense: Int) {
        totalExpenses += expense
    }
}
从文件中:

结构和枚举是值类型。默认情况下 值类型的属性不能从其实例中修改 方法

但是,如果需要修改结构的属性或 枚举,您可以选择使用 该方法的行为


有关详细信息,请参见除非使用mutating关键字,否则无法更改struct,struct默认情况下是不可变的,请尝试以下操作:

mutating func addExpense(expense: Int) { ... }

前几天我遇到了这个问题,要么在函数中使用
mutating
关键字,要么将
struct
定义为
class

这可能需要更好的错误消息,其中提到需要“mutating”。嗯,编译器是全新的…@gnasher729。我错过了doc(第一次编程)中的那部分,我不知道为什么我不能添加两个int。Swift中的编译器错误是非常可怕的。他们真正的意思是“啊,有点不对劲……”。这取决于你去弄清楚是什么。更糟糕的是,有时这些信息会将你指向完全错误的方向。我觉得我又在使用80年代早期的C编译器了。谢谢。那么,在这种情况下你会用什么?类?如果使用了类,则不需要指定方法是
mutating
,但这不是使用类而不是结构的原因。我建议看:谢谢。我担心的是添加“mutating”关键字在某种程度上是一种糟糕的做法。使用structs和
mutating
是完全有效的,我更喜欢它而不是使用类,因为您不必担心内存泄漏之类的问题。问题是什么?@ShaifulIslam“如何解决此错误?”。现在就添加,谢谢。