使用 func
来声明一个函数,使用名字和参数来调用函数,使用 ->
来指定函数返回值的类型。例如:
func greet(name: String, day: String) -> String
{
return "Hello \(name), today is \(day)."
}
//调用函数(注意第一个参数不含参数名)
greet("Bob", day: "Tuesday")
无参数的函数:
// 后面的 Void 可用 () 替代或省略不写
func sayWelcome() -> Void
{
print("Nice to meet you!")
}
- 使用元组来让一个函数返回多个值。
该元组的元素可以用名称或数字来表示。例如:
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int)
{
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics([5, 3, 100, 3, 9])
print(statistics.sum)
print(statistics.2) //这两种方式都可以
- 函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:
func sumOf(numbers: Int...) -> Int
{
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
- 函数可以嵌套,被嵌套的函数可以访问外侧函数的变量。可以使用嵌套函数来重构一个太长或者太复杂的函数。例如:
func returnFifteen() -> Int
{
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
- 函数可以作为另一个函数的返回值。
The next example defines two simple functions called
stepForward(_:)
andstepBackward(_:)
. ThestepForward(_:)
function returns a value one more than its input value, and thestepBackward(_:)
function returns a value one less than its input value. Both functions have a type of(Int) -> Int
:
func stepForward(input: Int) -> Int {
return input + 1
}
func stepBackward(input: Int) -> Int {
return input - 1
}
Here’s a function called
chooseStepFunction(_:)
, whose return type is “a function of type(Int) -> Int
”. ThechooseStepFunction(_:)
function returns thestepForward(_:)
function or thestepBackward(_:)
function based on a Boolean parameter calledbackwards
:
func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
return backwards ? stepBackward : stepForward
}
chooseStepFunction
是一个返回函数的函数(其类型准确说来是:接受一个 Bool
型参数,并返回一个函数,该函数接受一个 Int
型变量并返回一个 Int
值),如果参数 backwards
为真就返回 stepBackward
,否则就返回 stepForward
。
- 函数也可以当做参数传入另一个函数。例如:
func addTwoInts(a: Int, _ b: Int) -> Int {
return a + b
}
func printMathResult(mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
print("Result: \(mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5)
// Prints "Result: 8"
本例定义了一个名为 printMathResult(_:_:_:)
的函数,该函数有三个参数。第一个参数名为 mathFunction
, 类型为 (Int, Int) -> Int
.
PS: 参数 a, b 前的下划线 _ 表示调用该函数的时候不写参数名。