Swift 函数参数和返回值
在本教程中,我们将通过示例学习 Swift 中的函数参数和返回值。
Swift 函数参数
函数参数是函数接受的值。
在学习函数参数和返回值之前,请确保了解 Swift 函数。
让我们看一个例子,
func addNumbers(a: Int, b: Int) {
var sum = a + b
print("Sum:", sum)
}
addNumbers(a: 2, b: 3)
结果为:
Sum: 5
在上面的实例中,函数 addNumbers()
接受两个参数:a
和 b
,
addNumbers(a: 2, b: 3)
这里,a:2,b:3
指定参数 a
和 b
将分别获得值 2 和 3。
具有默认值的函数参数
在 Swift 中,我们可以为函数参数提供默认值。
我们使用 =
运算符提供默认值。例如,
func addNumbers( a: Int = 7, b: Int = 8) {
var sum = a + b
print("Sum:", sum)
}
// function call with two arguments
addNumbers(a: 2, b: 3)
// function call with one argument
addNumbers(a: 2)
// function call with no arguments
addNumbers()
结果如下:
Sum: 5
Sum: 10
Sum: 15
在上面的实例中,请注意函数定义,
func addNumbers(a: Int = 7, b: Int = 8) {
...
}
这里,我们分别为参数a和b提供了默认值 7 和 8。下面是这个程序的工作原理:
1.addNumbers(a:2,b:3)
这两个值都在函数调用期间传递。因此,使用这些值代替默认值。
2.addNumbers(a:2)
在函数调用期间,仅传递参数 a
的一个值。因此,默认值用于参数 b
。
3.addNumbers()
函数调用期间不传递任何值。因此,默认值用于参数 a
和 b
。
带参数标签的函数
在 Swift 中,我们可以使用参数标签以一种表达性和句子式的方式定义函数。例如,
func sum(of a: Int, and b: Int) {
...
}
这里,sum()
函数有参数标签:of
和 and
。
在调用函数时,我们可以使用参数标签而不是参数名。例如,
sum(of: 2, and: 3)
这里,我们使用参数标签调用值为 2 和 3 的 sum()
。
实例
func sum(of a: Int, and b: Int) {
print("Sum:", a + b)
}
sum(of: 2, and: 3)
结果如下:
Sum: 5
注意:以 sum(of:2,and:3)
比 sum(a:2,b:3)
的形式调用函数更有意义。
忽略参数标签
我们还可以通过在参数名之前写一个 _
来省略参数标签。例如,
func sum(_ a: Int, _ b: Int) {
print("Sum:", a + b)
}
sum(2, 3)
结果如下:
Sum: 5
_
,那么我们可以调用没有参数标签或参数名的函数。具有可变参数的函数
有时,我们事先不知道将传递给函数的参数的数量。为了处理这种情况,我们可以在 Swift 中使用可变参数。
变量参数允许我们在函数调用期间传递不同数量的值。
我们在参数类型后使用 …
字符表示可变参数。例如,
// program to find sum of multiple numbers
func sum( numbers: Int...) {
var result = 0
for num in numbers {
result = result + num
}
print("Sum = \(result)")
}
// function call with 3 arguments
sum(numbers: 1, 2, 3)
// function call with 2 arguments
sum (numbers: 4, 9)
结果如下:
Sum = 6
Sum = 13
在上面的实例中,我们创建了接受可变参数的函数 sum()
。注意这一句,
sum(numbers: 1, 2, 3)
sum(numbers: 4, 9)
这里,我们可以用不同的参数调用相同的函数。
for
循环访问每个值。具有 inout 参数的函数
定义函数参数时,不能在函数体内修改函数参数。例如,
func changeName(name: String) {
if name == ""{
// Cause Error
name = "Ross"
}
}
在这里,上述代码将产生一个错误:Error: cannot assign to value: 'name' is a 'let' constant
。这是因为参数的行为类似于常量值。
为了解决这个问题,我们需要将参数定义为 inout
参数。例如,
func changeName(name: inout String) {
if name == "Ross" {
name = "Joey"
}
}
var userName = "Ross"
print("Before: ", userName)
changeName(name: &userName)
print("After: ", userName)
结果如下:
Before: Ross
After: Joey
在上面的实例中,我们声明了一个接受 inout
参数 name
的函数 changeName()
。
当使用 inout
参数调用函数时,我们必须在变量名作为参数传递之前使用 ampersand(&)
。
changeName(name: &userName)
in-out
参数有一个值,该值传递给函数,由函数修改,然后从函数传回以替换原始值。因此,函数调用中传递的值必须是变量。
Swift 函数返回值
函数可能返回值,也可能不返回值。如果我们希望函数返回一些值,我们将使用 return
语句和 return
类型。例如,
func addNumbers(a: Int, b: Int) -> Int {
var sum = a + b
return sum
}
let result = addNumbers(a: 2, b: 3)
print("Sum:", result)
结果为:
Sum: 5
在上面的实例中,我们创建了一个名为 addNumbers()
的函数。函数将两个数字相加并返回总和。
return sum
返回的值存储在结果变量中。
返回多个值的函数
函数还可以返回多个值。例如,
func checkMarks() -> (String, Int) {
...
return (message, marks)
}
这里,return
语句返回两个值:message
和 marks
。
此外,-> (String, Int)
指定返回类型消息和标记。而且,顺序应该相同。也就是说,第一个返回值应该是字符串,第二个应该是整数。
实例
func compute(number: Int) -> (Int, Int, Int) {
var square = number * number
var cube = square * number
return (number, square, cube)
}
var result = compute(number: 5)
print("Number:", result.0)
print("Square:", result.1)
print("Cube:", result.2)
结果如下:
Number: 5
Square: 25
Cube: 125
在上面的实例中,compute()
函数接受一个数字,并计算该数字的平方和立方体。注意这一行,
return (number, square, cube)
在这里,函数同时返回数字、其平方和立方体值。
返回的值存储在结果中。在这里,结果是一个存储多个值的元组。要了解更多信息,请访问 Swift Tuple。
要访问元组中的单个值,我们使用索引号。结果就是 result.0
返回 5,result.1
返回 25,result.2
返回 125。