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