Swift ——函数下部分(函数重载、函数类型 )

上部分链接

一、函数的重载

规则 : 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) // 30

c、可变参数、省略参数标签、函数重载一起使用产生二义性时,编译器有可能会报错

二、函数类型 

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)) // 45

2、函数类型作为函数参数

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) // 10

3、函数类型作为返回值 (返回值是函数类型的函数,叫做高阶函数)

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)) // 4

4、嵌套函数 (将函数定义在函数内部)

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值