Functions (函数)
函数是一个执行特定任务的代码段.通过名称来标识和调用它们.
在Swift中,每个函数都有类型,包括函数的参数类型和返回值类型.这些类型与Swift中的其他类型使用起来一样,这使得函数可以作为参数传递给另一个函数,以及可以从一个函数中返 回函数,一个函数也可以写在另一个函数内部,这样可以更有效的封装和嵌套.
Defining and Calling Functions (定义和调用函数)
当你在定义函数的时候,你可以选择性的命名一个或者多个参数类型值,以及函数执行后的返回值类型.
每个函数都有一个名字,它是用了描述函数的功能.如果想调用这个函数,可以直接使用函数的名字并传递相应的参数(参数的类型要与函数的参数列表匹配).
下面是一个greetingForPerson函数的简单例子,它接收一个人名作为参数,返回一个问候语(一个String类型的值):
func sayHello(personName: String) -> String {
let greeting = "Hello, " + personName + "!"
return greeting
}
上面的代码包含了函数定义的信息:前缀的关键字func,以及紧跟在函数名称后面的返回箭头符号(->),它表示函数的返回值类型.
这个定义样例描述了这个函数有什么功能,它要接收什么,以及函数完成后会返回什么.这使得这个函数在代码的其他地方调用都会非常清晰:
println(sayHello("Anna"))
// prints "Hello, Anna!"
println(sayHello("Brian"))
// prints "Hello, Brian!”
你可以多次调用sayHello函数,并使用不同的参数值.为了简化函数体,可以使用一行代码整合:
func sayHelloAgain(personName: String) -> String {
return "Hello again, " + personName + "!"
}
println(sayHelloAgain("Anna"))
// prints "Hello again, Anna!”
Function Parameters and Return Values (函数的参数和返回值)
在Swift中,函数的参数和返回值是非常富有弹性的.你可以定义任意类型的返回值,也可以使用一个或者多个参数(或者匿名的参数).
Multiple Input Parameters (多个参数)
函数可以有多个参数,它们写在函数的括号内,并使用逗号分隔.
代码例子:
func halfOpenRangeLength(start: Int, end: Int) -> Int {
return end - start
}
println(halfOpenRangeLength(1, 10))
// prints "9”
Functions Without Parameters (无参函数)
函数没有要求必须使用参数.下面的函数例子中使用了没有参数的函数,当它被调用的时候,它总是返回相同的String信息:
func sayHelloWorld() -> String {
return "hello, world"
}
println(sayHelloWorld())
// prints "hello, world”
无参的函数定义的时候仍然需要在函数名后面使用括号().
Functions Without Return Values (无返回值函数)
函数也可以不定义返回值,这么的代码样例定义了一个函数waveGoodbye,它只是打印输出String值,而不是返回这个值:
func sayGoodbye(personName: String) {
println("Goodbye, (personName)!")
}
sayGoodbye("Dave")
// prints "Goodbye, Dave!"
由于函数不需要返回值,因此定义函数的时候没有使用返回剪头(->)
注意点:
严格意义上说,sayGoodbye函数仍然有返回值,尽管没有定义它的返回值.当函数没有定义返回值的时候,这个函数返回一个Void类型的值.它是一个空的元组,元素个数为零,可以写做 ().
在调用函数的时候,也可以忽略函数的返回值:
func printAndCount(stringToPrint: String) -> Int {
println(stringToPrint)
return countElements(stringToPrint)
}
func printWithoutCounting(stringToPrint: String) {
printAndCount(stringToPrint)
}
printAndCount("hello, world")
// prints "hello, world" and returns a value of 12
printWithoutCounting("hello, world")
// prints "hello, world" but does not return a value”
注意点:
函数的返回值可以被忽略,但是函数必须有一个返回值.定义了函数的返回值,但如果在函数最后没有返回值,将会导致一个编译错误.