当用作函数中的参数时,结构值类型前面需要关键字 var

Keyword var required in front of struct value type when used as a parameter in a function

为什么在函数中使用时,结构的值类型参数前面需要关键字 var?

struct MyValueType {
    var name:String
    var assignment:String
    var grade:Int
}

class MyReferenceType{
    var name:String
    var assignment:String
    var grade:Int
    init(name:String,assignment:String,grade:Int){
        self.name = name
        self.assignment = assignment
        self.grade = grade
    }
}

var myRef = MyReferenceType(name:"Jon",assignment:"Math Test 1",grade:90)

print(myRef.assignment)
func extraCreditReferenceType(ref:MyReferenceType,extraCredit:Int){
    ref.grade += extraCredit
}

func extraCreditValueType(var val:MyValueType,extraCredit:Int){
    val.grade += extraCredit
}

var ref = MyReferenceType(name:"Jon",assignment:"Math Test 1",grade:90)

print(ref.grade)
extraCreditReferenceType(ref,extraCredit:5)
print("Reference: \(ref.name) - \(ref.grade)")



var val = MyValueType(name:"Jon",assignment:"Math Test 1",grade:90)
extraCreditValueType(val,extraCredit:5)
print("Value: \(val.name) - \(val.grade)")

有问题的行是以下函数:

func extraCreditValueType(var val:MyValueType,extraCredit:Int){
    val.grade += extraCredit
}

通过删除关键字 var,代码将无法编译。

因为默认情况下作为参数的结构是 let 类型,并且因为您正在对函数中的结构进行更改,所以它必须是 var

似乎参数中的 var 在 swift 3.0 中是不允许的,所以最终还是要删除它

此外,您的 extraCreditValueType func 不会按照您的想法执行,因为结构是按值传递的,参数 valval 不同在函数外部,因此在函数中对其进行更改不会在函数外部产生影响。您应该使 MyValueType 成为 class (并可能更改名称)或 return 函数中的 val 以在函数外部使用