https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
输入输出参数
函数参数默认为常量。试图从函数体内部更改函数参数的值将导致编译时错误。这意味着您不能错误地更改参数的值。如果您希望函数修改参数的值,并且希望在函数调用结束后这些更改仍然存在,请将该参数定义为输入输出参数。
通过在参数类型之前放置inout关键字来编写输入输出参数。输入输出参数具有传入函数的值,由函数修改,并传回函数以替换原始值。有关输入输出参数行为和相关编译器优化的详细讨论,请参见输入输出参数。
您只能将变量作为输入输出参数的参数传递。您无法将常量或文字值作为参数传递,因为常量和文字值无法修改。当您将变量作为输入输出参数的参数传递时,在变量名称之前直接放置“&”符号,以表示函数可以修改它。
注意事项
输入输出参数不能有默认值,可变参数不能标记为inout。
这是一个名为swapTwoInts(
::)的函数示例,它有两个in-out整数参数a和b:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoInts(::) 函数简单地将 b 的值交换到 a 中,将 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"
上面的示例显示,swapTwoInts(::)函数修改了一些整数和另一个整数的原始值,尽管它们最初是在函数之外定义的。
注意
传入输出参数与从函数返回值并不相同。上面的swapTwoInts示例没有定义返回类型或返回值,但它仍然修改了someInt和anotherInt的值。传入输出参数是函数在其函数体范围之外具有影响的替代方式。
public func getQuestionList(inout language: String) -> NSArray
?公共函数getQuestionList(inout language: String) -> NSArray
,其中inout language: String
表示该函数将会读取并修改调用方传入的language
变量。返回值为NSArray
类型。 - TotoroTotorogetQuestion
有任何副作用。 - BallpointBen