Files
the-swift-programming-langu…/source/chapter2/06_Functions.md
2014-06-06 23:25:35 +08:00

53 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 函数Functions
本页包含内容:
- 函数定义与调用
- 函数参数与返回值
- 函数参数名称
- 函数类型
- 函数嵌套
函数是用来完成特定任务的独立的代码块。你给一个函数起一个合适的名字,用来标示函数做什么,并且当函数需要执行的时候,这个名字会被“调用”。
Swift统一的函数语法足够灵活可以用来表示任何函数包括从最简单的没有参数名字的C风格函数到复杂的带局部和外部参数名的Objective-C风格函数。参数可以提供默认值以简化函数调用。参数也可以即当做传入参数也当做传出参数也就是说一旦函数执行结束传入的参数值可以被修改。
在Swift中每个函数都有一种类型包括函数的参数值类型和返回值类型。你可以把函数类型当做任何其他普通变量类型一样处理这样就可以更简单地把函数当做别的函数的参数也可以从其他函数中返回函数。函数的定义可以写在在其他函数定义中这样可以在嵌套函数范围内实现功能封装。
## 函数的定义与调用
当你定义一个函数时你可以定义一个或多个有名字和类型的值作为函数的输入称为参数parameters也可以定义某种类型的值作为函数执行结束的输出称为返回类型
每个函数有个函数名用来描述函数执行的任务。要使用一个函数时你用函数名“调用”并传给它匹配的输入值称作实参arguments。一个函数的实参必须与函数参数表里参数的顺序一致。
在下面例子中的函数叫做`"greetingForPerson"`,之所以叫这个名字是因为这个函数用一个人的名字当做输入,并返回给这个人的问候语。为了完成这个任务,你定义一个输入参数-一个叫做`personName``String`值,和一个包含给这个人问候语的`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`函数时,在圆括号中传给它一个`String`类型的实参。因为这个函数返回一个`String`类型的值,`sayHello`可以被包含在`println`的调用中,用来输出这个函数的返回值,正如上面所示。
`sayHello`的函数体中,先定义了一个新的名为`greeting``String`常量,同时赋值了给`personName`的一个简单问候消息。然后用`return`关键字把这个问候返回出去。一旦`return greeting`被调用,该函数结束它的执行并返回`greeting`的当前值。
你可以用不同的输入值多次调用`sayHello`。上面的例子展示的是用`"Anna"``"Brian"`调用的结果,该函数分别返回了不同的结果。
为了简化这个函数的定义,可以将问候消息的创建和返回写成一句:
func sayHelloAgain(personName: String) -> String {
return "Hello again, " + personName + "!"
}
println(sayHelloAgain("Anna"))
// prints "Hello again, Anna!
## 函数参数与返回值