Swift 函数参数和返回值

在本教程中,我们将通过示例学习 Swift 中的函数参数和返回值。

Swift 函数参数

函数参数是函数接受的值。

在学习函数参数和返回值之前,请确保了解 Swift 函数

让我们看一个例子,

  1. func addNumbers(a: Int, b: Int) {
  2. var sum = a + b
  3. print("Sum:", sum)
  4. }
  5. addNumbers(a: 2, b: 3)

结果为:

  1. Sum: 5

在上面的实例中,函数 addNumbers() 接受两个参数:ab

  1. addNumbers(a: 2, b: 3)

这里,a:2,b:3 指定参数 ab 将分别获得值 23

注意:函数调用期间传递的值 23 也被称为参数。

具有默认值的函数参数

在 Swift 中,我们可以为函数参数提供默认值。

我们使用 = 运算符提供默认值。例如,

  1. func addNumbers( a: Int = 7, b: Int = 8) {
  2. var sum = a + b
  3. print("Sum:", sum)
  4. }
  5. // function call with two arguments
  6. addNumbers(a: 2, b: 3)
  7. // function call with one argument
  8. addNumbers(a: 2)
  9. // function call with no arguments
  10. addNumbers()

结果如下:

  1. Sum: 5
  2. Sum: 10
  3. Sum: 15

在上面的实例中,请注意函数定义,

  1. func addNumbers(a: Int = 7, b: Int = 8) {
  2. ...
  3. }

这里,我们分别为参数a和b提供了默认值 78。下面是这个程序的工作原理:

1.addNumbers(a:2,b:3)

这两个值都在函数调用期间传递。因此,使用这些值代替默认值。

2.addNumbers(a:2)

在函数调用期间,仅传递参数 a 的一个值。因此,默认值用于参数 b

3.addNumbers()

函数调用期间不传递任何值。因此,默认值用于参数 ab


带参数标签的函数

在 Swift 中,我们可以使用参数标签以一种表达性和句子式的方式定义函数。例如,

  1. func sum(of a: Int, and b: Int) {
  2. ...
  3. }

这里,sum() 函数有参数标签:ofand

在调用函数时,我们可以使用参数标签而不是参数名。例如,

  1. sum(of: 2, and: 3)

这里,我们使用参数标签调用值为 23sum()

实例
  1. func sum(of a: Int, and b: Int) {
  2. print("Sum:", a + b)
  3. }
  4. sum(of: 2, and: 3)

结果如下:

  1. Sum: 5

注意:以 sum(of:2,and:3)sum(a:2,b:3) 的形式调用函数更有意义。


忽略参数标签

我们还可以通过在参数名之前写一个 _ 来省略参数标签。例如,

  1. func sum(_ a: Int, _ b: Int) {
  2. print("Sum:", a + b)
  3. }
  4. sum(2, 3)

结果如下:

  1. Sum: 5
注意:如果在参数名之前使用 _,那么我们可以调用没有参数标签或参数名的函数。

具有可变参数的函数

有时,我们事先不知道将传递给函数的参数的数量。为了处理这种情况,我们可以在 Swift 中使用可变参数。

变量参数允许我们在函数调用期间传递不同数量的值。

我们在参数类型后使用 字符表示可变参数。例如,

  1. // program to find sum of multiple numbers
  2. func sum( numbers: Int...) {
  3. var result = 0
  4. for num in numbers {
  5. result = result + num
  6. }
  7. print("Sum = \(result)")
  8. }
  9. // function call with 3 arguments
  10. sum(numbers: 1, 2, 3)
  11. // function call with 2 arguments
  12. sum (numbers: 4, 9)

结果如下:

  1. Sum = 6
  2. Sum = 13

在上面的实例中,我们创建了接受可变参数的函数 sum()。注意这一句,

  1. sum(numbers: 1, 2, 3)
  2. sum(numbers: 4, 9)

这里,我们可以用不同的参数调用相同的函数。

注意:在获得多个值后,数字表现为一个数组,因此我们可以使用 for 循环访问每个值。

具有 inout 参数的函数

定义函数参数时,不能在函数体内修改函数参数。例如,

  1. func changeName(name: String) {
  2. if name == ""{
  3. // Cause Error
  4. name = "Ross"
  5. }
  6. }

在这里,上述代码将产生一个错误:Error: cannot assign to value: 'name' is a 'let' constant。这是因为参数的行为类似于常量值。

为了解决这个问题,我们需要将参数定义为 inout 参数。例如,

  1. func changeName(name: inout String) {
  2. if name == "Ross" {
  3. name = "Joey"
  4. }
  5. }
  6. var userName = "Ross"
  7. print("Before: ", userName)
  8. changeName(name: &userName)
  9. print("After: ", userName)

结果如下:

  1. Before: Ross
  2. After: Joey

在上面的实例中,我们声明了一个接受 inout 参数 name 的函数 changeName()

当使用 inout 参数调用函数时,我们必须在变量名作为参数传递之前使用 ampersand(&)

  1. changeName(name: &userName)

in-out 参数有一个值,该值传递给函数,由函数修改,然后从函数传回以替换原始值。因此,函数调用中传递的值必须是变量。


Swift 函数返回值

函数可能返回值,也可能不返回值。如果我们希望函数返回一些值,我们将使用 return 语句和 return 类型。例如,

  1. func addNumbers(a: Int, b: Int) -> Int {
  2. var sum = a + b
  3. return sum
  4. }
  5. let result = addNumbers(a: 2, b: 3)
  6. print("Sum:", result)

结果为:

  1. Sum: 5

在上面的实例中,我们创建了一个名为 addNumbers() 的函数。函数将两个数字相加并返回总和。

  1. return sum

返回的值存储在结果变量中。


返回多个值的函数

函数还可以返回多个值。例如,

  1. func checkMarks() -> (String, Int) {
  2. ...
  3. return (message, marks)
  4. }

这里,return 语句返回两个值:messagemarks

此外,-> (String, Int) 指定返回类型消息和标记。而且,顺序应该相同。也就是说,第一个返回值应该是字符串,第二个应该是整数。

实例

  1. func compute(number: Int) -> (Int, Int, Int) {
  2. var square = number * number
  3. var cube = square * number
  4. return (number, square, cube)
  5. }
  6. var result = compute(number: 5)
  7. print("Number:", result.0)
  8. print("Square:", result.1)
  9. print("Cube:", result.2)

结果如下:

  1. Number: 5
  2. Square: 25
  3. Cube: 125

在上面的实例中,compute() 函数接受一个数字,并计算该数字的平方和立方体。注意这一行,

  1. return (number, square, cube)

在这里,函数同时返回数字、其平方和立方体值。

返回的值存储在结果中。在这里,结果是一个存储多个值的元组。要了解更多信息,请访问 Swift Tuple

要访问元组中的单个值,我们使用索引号。结果就是 result.0 返回 5result.1 返回 25result.2 返回 125

分类导航