swift函数

一 定义

//有返回值 func name(a: Int,b: Int) -> return type { function body } //无返回值 func name(){ function body } //可选返回值 func somef() -> Int? {}

二 外部参数名 就是调用时候的参数名称和函数内部使用时候的名称不同,但是同一变量。
省略情况下,外部和内部用同一个名字。
//这个from是外部参数名,hometown是内部名 func someFunction(name: String,form hometown: String) { print("\(name) 来自 \(hometown)"); }someFunction(name: "aa", form: "china")

三 忽略参数名
//正常情况 func someFunction(name: String,hometown: String) {} someFunction(name: "cluo", hometown: "putaoya")//忽略参数名的情况 func someFunction2(_ name: String,hometown: String) {} //主要区别在这里第一个参数没有name字样了。 someFunction2("meixi", hometown: "agenting")

注意:如果没有接收函数的返回值,会得到一个警告。通过在函数上面添加@discardableResult可以去除警告 四 忽略返回值
func printAntCount(string: String) -> Int { print(string); return string.count; } //swift中如果没有使用函数的返回值,会得到一个警告。使用_消除警告。 let _ = printAntCount(string: "hello ,world")

五 多个返回值 //其实就是返回元组类型
func mainMax(array: [Int]) -> (min: Int,max: Int) { var currentMin = array[0]; var currentMax = array[0]; forvalue in array { if value < currentMin { currentMin = value; } else if value > currentMax { currentMax = value; } } return (currentMin,currentMax); } let testArr = [1,10,5]; print(mainMax(array: testArr));

六 默认参数值 //paramb不传的时候默认10
func someFunction(parama: Int,paramb: Int = 10) -> Int { return parama + paramb; } print(someFunction(parama: 2,paramb: 5)); print(someFunction(parama: 2));

七 可变参数
//可变参数 func pingJunZhi(numbers: Double...) -> Double { var totla: Double = 0; for number in numbers { totla += number; } return totla / Double(numbers.count); } print(pingJunZhi(numbers: 1,2,3,4,5));

八 输入输出参数 //swift中默认情况下函数的参数都是常量(即:不可以修改),这是swift为了避免在函数内部不小心修改了函数外部变量.
//但是有时候确实需要修改外部变量的时候,声明时候需要在参数类型前面加关键字 inout. 并且调用时候参数前加 &
var a = 10; //声明时加inout func change(param: inout Int) { param = 12; }//调用时加 & change(param: &a); print(a);

九 函数类型 【swift函数】swift的每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。
如:下面这个addTwoNumers函数的类型是:
(Int, Int) -> Int 这个类型和 Int,String等类型是一样的,可以用来定义变量,定义函数的参数类型,作为函数的返回类型。
func addTwoNumers(a: Int,b: Int) -> Int { return a + b; } //定义函数类型变量 var matchFunction: (Int,Int)->Int; matchFunction = addTwoNumers(a:b:); //定义函数参数类型 func otherFunction(f: (Int,Int)->Int,parama: Int,paramb: Int) -> Int { return f(parama,paramb); } let res = otherFunction(f: matchFunction, parama: 2, paramb: 4); //作为函数返回类型 func stepForward(_ input: Int) -> Int { return input + 1 } func stepBackward(_ input: Int) -> Int { return input - 1 } 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 }

    推荐阅读