函数类型做参数和闭包的区别

本文深入探讨了在Objective-C编程中如何使用函数类型作为参数及闭包的概念,通过实例展示了这两种机制的实现方式及其区别,旨在帮助开发者更熟练地运用这些高级特性提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

func printIntNum(add: (Int, Int) -> Int, a: Int, b: Int) {
        println("num = \(add(a,b))")
}

之前已经学过函数类型做参数,在这里我们发现这个add是一个两个参数为Int类型,返回值为Int类型的函数类型。在函数内部实现调用add函数。

func add(a: Int, b: Int) -> Int {
        return a + b
}
printIntNum(add, a: 10, b: 10)

调用时 ,add为函数类型参数传入,在调用函数是调用add()函数。

上一节中,使用了闭包,闭包的表达式是 {(参数) -> (返回值) in 实现 }。在函数调用时

var c = 1
self.printIntNum({ (a, b) -> Int in
   c = 2
   return a + b + c
}, a: 1, b: 1)

我们发现这也是一种闭包的表现形式,OC中的block。在运行时调用block

那这两个直接有神马不同呢?理解为函数类型做参数还是一种闭包呢?

这是一个事件的两种不同说法而已。函数类型作为函数参数,就是把函数作为参数(当做是普通类型的参数),这种函数是匿名函数(指一类无需定义标识符(函数名)的函数或子程序)
神马是闭包?
闭包是词法闭包(Lexical Closure)的简称。是在其词法上下文中引用了自由变量(自由变量是指局部变量以为的变量)的函数。自由变量和函数一同存在。
另一种说法:闭包是有函数和其相关的引用环境组合而成的实体

闭包也是匿名函数的一种,并且可以访问函数的外部变量。而函数类型做参数,这种函数的作用只是一般回调,用来调用已经处理好的代码块。

注:引用《The Swift Programming Language》
如发现有写的不对的地方,欢迎指正,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值