代码改变世界

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
}

 

声明:该系列内容均来自网络或电子书籍,只做学习总结!