Ios 在函数中用作参数时,结构值类型前面需要关键字var
在函数中使用时,为什么在结构的值类型参数前面需要关键字varIos 在函数中用作参数时,结构值类型前面需要关键字var,ios,swift,struct,var,Ios,Swift,Struct,Var,在函数中使用时,为什么在结构的值类型参数前面需要关键字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
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
swift 3.0中似乎不允许参数中的var
,因此最终必须将其删除
另外,您的
extraCreditValueType
func不会像您认为的那样执行操作,因为结构是按值传递的,所以参数val
与函数外部的val
不同,因此在函数中对其进行更改不会对函数外部产生影响。您应该将MyValueType
设置为一个类(并更改名称),或者从函数返回val
,以便在函数外部使用。。。或者将其设置为一个inout
参数。啊,叶,忘记了在Swift 3.0中,参数前面的“var”不仅仅是“不需要”,它是不允许的。参数始终是常量。如果愿意,您可以在函数的第一行中写入“var param=param”,这将创建一个与参数具有相同名称和值的变量。您的func ExtraCreditValue类型可能没有执行您认为它所做的操作。它不会修改调用方中的val。