上部分链接
一、函数的重载
规则 : a、函数名相同 b、参数个数不同、参数类型不同 参数标签不同
//原函数 func sum(a: Int , b: Int) -> Int{ a + b } // 参数个数不同 func sum(a: Int ,b: Int ,c: Int) -> Int{ a + b + c } //参数类型不同 func sum(a: Int ,b: Double) -> Double { Double(a) + b } // 忽略标签 func sum(_ a: Int ,_ b: Int) -> Int{ a + b } //参数标签不同 func sum (v1: Int ,v2: Int) -> Int{ v1 + v2 }调用
注意点:
a、返回值类型与函数重载无关
b、默认参数值和函数重载一起使用产生二义性时,编译器并不会报错 (在C++中会报错)
func sum(a: Int ,b: Int) -> Int { a + b} func sum(a: Int ,b: Int , c: Int = 10 ) -> Int { a + b + c } //会调用的是: sum(a: Int ,b: Int) -> Int sum(a: 10, b: 20) // 30c、可变参数、省略参数标签、函数重载一起使用产生二义性时,编译器有可能会报错
二、函数类型
1、每一个函数都是有类型的,函数类型由形式参数类型 、返回值类型组成
func test(){} //() -> void 或 () -> () func sum(a: Int ,b: Int) -> Int {a + b } // (Int , Int) -> Int //定义变量 var fn: (Int ,Int) -> Int = sum(a:b:) print(fn(20,25)) // 452、函数类型作为函数参数
func sum (a: Int ,b: Int) -> Int{ a + b} func differece(a: Int ,b: Int) -> Int { a - b} func printResult(_ mathFn:(Int ,Int) -> Int ,_ a: Int ,_ b: Int){ print(mathFn(a,b)) } printResult(sum(a:b:), 30, 40) // 70 printResult(differece(a:b:), 60, 50) // 103、函数类型作为返回值 (返回值是函数类型的函数,叫做高阶函数)
func next(_ input: Int) -> Int { input + 1} func previous(_ input: Int) -> Int {input - 1} func forward(_ forward : Bool) -> (Int) -> Int{ forward ? next(_:) : previous(_:) } print(forward(false)(3)) // 2 print(forward(true)(3)) // 44、嵌套函数 (将函数定义在函数内部)
func forward(_ forward: Bool) -> (Int) -> Int { func next(_ input: Int) -> Int { input + 1 } func previous(_ input: Int) -> Int { input - 1 } return forward ? next(_:) : previous(_:) } print(forward(false)(3)) // 2 print(forward(true)(3)) // 4