文章目录
函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候"调用"这个函数来完成它的任务。
Swift 统一的函数语法非常的灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的 Objective-C 风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值将被修改。
在 Swift 中,每个函数都有一个由函数的参数值类型和返回值类型组成的类型。你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的定义可以写在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。
函数的定义与调用
当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入,称为参数,也可以定义某种类型的值作为函数执行结束时的输出,称为返回类型。
每个函数有个函数名,用来描述函数执行的任务。要使用一个函数时,用函数名来“调用”这个函数,并传给它匹配的输入值(称作 实参 )。函数的实参必须与函数参数表里参数的顺序一致。
下面例子中的函数用一个人的名字当做输入,并返回向这个人问候的语句。
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
所有的这些信息汇总起来成为函数的定义,并以 func 作为前缀。指定函数返回类型时,用返回箭头 ->(一个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示。
该定义描述了函数的功能,它期望接收什么作为参数和执行结束时它返回的结果是什么类型。这样的定义使得函数可以在别的地方以一种清晰的方式被调用。
print(greet(person: "Anna")) // 打印“Hello, Anna!”
为了简化这个函数的定义,可以将问候消息的创建和返回写成一句:
func greetAgain(person: String) -> String {
return "Hello again, " + person + "!"
}
print(greetAgain(person: "Brian")) // 打印“Hello again, Brian!”
函数参数与返回值
无参数函数
func sayHelloWorld() -> String {
return"Hello, world"
}
print(sayHelloWorld())
尽管函数没有参数,但定义中在函数名后还是需要一对圆括号,当被调用时,也需要在函数名后写一对圆括号。
多参数函数
func greet(person: String, alreadyGreeted:Bool) -> String {
if alreadyGreeted {
return "Hello again, \(person)!"
} else {
return"Hello, \(person)!"
}
}
print(greet(person: "Tim", alreadyGreeted: true))
无返回值函数
func greet(person: String) {
print("Hello, \(person)!")
}
因为这个函数不需要返回值,所以这个函数的定义中没有返回箭头 -> 和返回类型。严格来说,函数依然返回了一个值,返回了一个特殊的 void 值,它其实是一个空的元组,没有任何元素,写成 ()。
多重返回值函数
可以使用元组类型让多个值作为一个复合值从函数中返回。
下例中定义了一个名为 minMax(array:) 的函数,作用是在一个 Int 类型的数组中找出最小值与最大值:
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {