在函数体内,形参被视为常量,而不是变量;试图修改形参的值会引发编译时错误。 如果函数想要修改某个形参的值,就必须使用输入输出参数,把这种可修改性明确表达出来。
要使用输入输出参数,程序员必须确定三件事:
inout写在:和类型名之间。&,明确表示它可以被修改。完成这些之后,函数会在内部复制一份输入输出参数,按函数体中的指示修改它,然后在函数返回时把修改后的值复制回传入的那个变量。
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
关于输入输出参数,还有几条额外的规则需要了解。
1. 在带有输入输出参数的函数内部,不允许引用作为输入输出参数传入的那个变量。
2. 同一个变量不能在同一个函数中作为多个输入输出参数传入。
例如,`inoutFunc(&mutVar, &mutVar)`会引发编译器错误。