2020-03-31 swift闭包

闭包写法

let fun1 = {
    (num:Int)->Int in
    return num*num
}
print(type(of:fun1))//fun1类型:(Int) -> Int
print(fun1(4))

闭包表达式语法
1、由一对{}开始和结束;
2、in关键字把闭包分成两部分:参数与返回值、闭包体

闭包缩写

func getScore(score:[Int],con:(Int)->Bool)->[Int]{
    var newScore = [Int]()
    for item in score{
        if con(item){
            newScore.append(item)
        }
    }
    return newScore
}
var score = [1,2,3,4,5]
print(getScore(score:score,con:{(s:Int)->Bool in return s>0}))

其他缩写:

print(getScore(score:score,con:{(s:Int) in return s>0}))

省略->返回类型

print(getScore(score:score,con:{s in return s>0}))

省略参数类型和括号

print(getScore(score:score,con:{s in s>0}))

单行表达式闭包可以省略 return 关键字来

print(getScore(score:score,con:{$0>0}))

省略参数列表定义,用0,1等等指代参数

尾随闭包

func printInfo(info:String,printFun:(String)->Void){
    printFun(info)
}

//普通调用方式
printInfo(info:"hello world",printFun:{s in print(s+"~~~")})

//使用尾随闭包进行调用
printInfo(info:"hello world"){s in print(s+"~~~")}

逃逸闭包

var recv:()->Void = {print("")}
var x = 10
func test1(closure:()->Void){
    recv = closure无法在函数外使用。
}
test1{
    x=100
}
recv()
func test2(closure:@escaping ()->Void){
    recv = closure 
}
test2{
    x = 200
}
recv()
print(x)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容