gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:00 24 4
gpt4 key购买 nike

为什么在函数中使用时,结构的值类型参数前面需要关键字 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 函数不会按照您的想法行事,因为结构是按值传递的,参数 val 不同>val 在函数外部,因此在函数中对其进行更改不会在函数外部产生影响。您应该使 MyValueType 成为一个类(并可能更改名称)或从要在函数外部使用的函数返回 val

关于ios - 当用作函数中的参数时,结构值类型前面需要关键字 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38387613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com