输入输出参数(In-Out Parameters)
变量参数,正如上面所述,仅仅能在函数体内被更改。如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。
定义一个输入输出参数时,在参数定义前加inout
关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。
你只能传递变量给输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数名前加&
符,表示这个值可以被函数修改。其实跟C语言中的形参十分相似。
注意
输入输出参数不能有默认值,而且可变参数不能用inout
标记。如果你用inout
标记一个参数,这个参数不能被var
或者let
标记。
下面是例子,swapTwoInts(_:_:)
函数,有两个分别叫做a
和b
的输入输出参数:
func swapTwoInts(inout a: Int,inout _ b: Int) {
let temporaryA = a
a = b
b = temporaryA
}
这个swapTwoInts(_:_:)
函数简单地交换a
与b
的值。该函数先将a
的值存到一个临时常量temporaryA
中,然后将b
的值赋给a
,最后将temporaryA
赋值给b
。
你可以用两个Int
型的变量来调用swapTwoInts(_:_:)
。需要注意的是,someInt
和anotherInt
在传入swapTwoInts(_:_:)
函数前,都加了&
的前缀:
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt,&anotherInt)
print("someInt is now \(someInt),and anotherInt is now \(anotherInt)")
// prints "someInt is now 107,and anotherInt is now 3"
从上面这个例子中,我们可以看到anotherInt
的原始值在swapTwoInts(_:_:)
函数中被修改,尽管它们的定义在函数体外。
原文链接:https://www.f2er.com/swift/325080.html注意
输入输出参数和返回值是不一样的。上面的swapTwoInts
函数并没有定义任何返回值,但仍然修改了anotherInt
的值。输入输出参数是函数对函数体外产生影响的另一种方式。以上内容选自The Swift Programming Language 官方文档