上一节我们讲了Swift的基础部分,例如数据类型、运算符和控制流等,现在我们来看下Swift的函数和闭包
一、Swift函数
函数是一个完成独立任务的代码块,Swift 中的函数不仅可以像C语言中的函数一样作为函数的参数和返回值,而且还支持嵌套,支持函数参数默认值、可变参数等。
函数实例:
1. 普通函数
2. 设置外部参数名
3. 快捷设置外部参数名
4. 设置默认参数值
5. 设置可变参数
6. 设置参数为变量
7. 设置输入输出参数
8. 函数类型使用
二、闭包
Swift 中的闭包其实就是一个函数代码块,它和ObjC中的Block 及Java中的lambda 是类似的。 闭包的特点就是可以捕获和存储上下文中的常量或者变量的引用,即使这些常量或者变量在原作用域已经被销毁了在代码块中仍然可以使用。
在Swift中闭包表达式的定义形式如下:
{ ( parameters ) -> returnType in
statements;
}
闭包使用:
1. 不使用闭包,使用函数
func mySum(num1:Int,num2:Int) -> Int{
return num1 + num2
}
func myMinus(num1:Int,num2:Int) -> Int{
return num1 - num2
}
func myCaculate(num1:Int, num2:Int, fn:(Int,Int)->Int) -> Int{
return fn(num1,num2)
}
var (a, b) = (1, 2)
myCaculate(a, b, mySum)
2. 使用闭包
3. 闭包的简化形式
4. 闭包继续简化,使用参数缩写
考虑到闭包表达式的可读取性,Swift 中如果一个函数的最后一个参数是一个函数类型的参数(或者说是闭包表达式),则可以将此参数写在函数括号之后,这种闭包称之为“尾随闭包”。
5. 尾随闭包
6. 捕获变量
前面说过闭包之所以称之为“闭包”,就是因为其可以捕获一定作用域内的常量或者变量进而闭合并包裹着。
func myAdd() -> ()->Int {
var total = 0
var step = 1
func fn() -> Int{
total += step
return total
}
return fn
}
-
Swift 会自动决定捕获变量或者常量副本的拷贝类型(值拷贝或者引用拷贝)而不需要开发者关心
- 被捕获的变量或者常量的内存管理同样是由
Swift 来管理,我们不用关心,例如当上面的函数a不再使用了,那么fn捕获的两个变量也就释放了。
|
请发表评论