Swift学习笔记(7):函数
2017-05-19 14:43 杨平 阅读(248) 评论(0) 编辑 收藏 举报目录:
- 函数参数与返回值
- 参数标签和参数名称
- 可变参数
- 传入传出参数
- 函数类型
- 嵌套函数
函数是一段完成特定任务的独立代码片段,使用func标示函数名,使用->标示返回类型。
・可以为函数参数设置默认值,以简化函数调用
・函数参数具有传入传出特性
・函数类型由函数的参数值类型和返回值类型唯一标定,与变量一样可以作为函数参数或返回值
・函数可以嵌套封装定义在其他函数体中,且可以作为返回值返回函数
func greet(person: String) -> String { let greeting = "Hello, " + person + "!" return greeting }
函数参数与返回值
// 无返回值函数 func greet(person: String) { print("Hello, \(person)!") } // 无参函数 func sayHelloWorld() -> String { return "hello, world" } // 多参有返回值函数 func minMax(array: [Int]) -> (min: Int, max: Int) { // logic codes return (currentMin, currentMax) } // 返回可选参数 func minMax(array: [Int]) -> (min: Int, max: Int)? { // return nil 条件不满足时返回nil return (currentMin, currentMax) }
参数标签和参数名称
每个函数参数都有一个标签和名称。参数标签在函数调用时外部使用,写在实参前。参数名称在函数体内使用,默认情况下函数使用名称作为标签。
// 具有函数参数标签和名称 func someFunction(argumentLabel parameterName: Int) { // 在函数体内,parameterName 代表参数值 } // 没有函数参数标签,内外部都是用参数名称 func someFunction(parameterName: Int) { // 在函数体内,parameterName 代表参数值 } // 省略函数参数标签,外部调用函数时可以在实参前省略参数标签 func someFunction(_ parameterName: Int) { // 在函数体内,parameterName 代表参数值 } // 具有默认值的函数参数 func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) { // 函数调用时不传参数2,parameterWithDefault值以12传入。 } someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) someFunction(parameterWithoutDefault: 4)
可变参数
可变参数可以接受0个或多个值,且一个函数有且仅有一个可变参数。
func arithmeticMean(_ numbers: Double...) -> Double { var total: Double = 0 for number in numbers { total += number } return total / Double(numbers.count) }
传入传出参数
可以使用inout标示一个函数参数为传入传出参数类型,可变参数(Int...)和常量不能作为输入输出参数。变量作为输入输出实参时需要前加 & 。
var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt)
函数类型
Swift语言中函数类型可以像其他类型一样定义变量和常量。
var mathFunction: (Int, Int) -> Int = addTwoInts
函数类型作为参数和返回值:
func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) { print("Result: \(mathFunction(a, b))") } func chooseStepFunction(backward: Bool) -> (Int) -> Int { return backward ? stepBackward : stepForward }
嵌套函数
func chooseStepFunction(backward: Bool) -> (Int) -> Int { func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } return backward ? stepBackward : stepForward }