函数
- 函数定义
func foo(firstname:String ,lastname:String)->(fullname:String){
return("\(firstname) \(lastname)")
}
- 函数类型
每一个函数都有它的类型,函数的类型由函数本身的参数类型和返回值类型来决定的。
func sum(x:Int,y:Int) -> (result:Int){return x + y}
//该函数类型为(Int,Int)->(Int)
- 返回函数类型
构建函数时作为参数或者返回值使用
func foo()->((String,String) -> String){
func bar(firstname:String,lastname:String) ->(fullname:String){
return("\(firstname) \(lastname)")
}
return bar
}
let namecombination = foo()
namecombination("wang","er")
闭包
- 个人认为闭包解决了跨作用域调用函数内部变量,函数之间相互调用内部变量等问题
- 闭包定义
闭包是一个使用花括号{} 包围起来,并且使用函数类型()->()来定义的代码模块。->符号分割了输入参数和返回值类型。在关键字 in 来区分闭包的头和闭包函数体。
{(params) -> returnType in
//闭包体
}
- 闭包作为函数参数传入
func mySort(array:Array<Any>,sortClosure:(int,int) -> Bool) -> Array<Any> {
//可以调用sortClosure
return array
}
-
传入闭包的优化
- 省略返回值
- 省略return(闭包只有一行代码)
-
后置闭包,
逃逸闭包和自动闭包
1. 后置闭包: 不将闭包作为参数传入,而写在函数尾部,增强可读性
//原结构
mySort(array: &stuArr, sortClosure: {
(stuArr[$0] as! Student).achievement > (stuArr[$1] as! Student).achievement
})
//后置闭包结构
mySort(array: &stuArr){
(stuArr[$0] as! Student).achievement > (stuArr[$1] as! Student).achievement
}
2. 自动闭包:实现简单闭包自动生成,闭包不能有参数,也只能有一句表达式
func myFunc2( closure:@autoclosure @escaping ()->Bool) {
}
//调用函数时,直接传入一个表达式即可,编译器会自动生成闭包参数
myFunc2(closure: 1+2+3>10)
Comments | 0 条评论