関数で使用する場合、構造体の値型パラメータの前にキーワードvarが必要なのはなぜですか?キーワードは関数のパラメータとして使用するときに構造体値型の前に必要です。
func extraCreditValueType(var val:MyValueType,extraCredit:Int){
val.grade += extraCredit
}
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は、そう思わないようです。呼び出し元のvalを変更することはありません。 – gnasher729