SWIFt闭包
2024-07-09 12:19:19 226人阅读
1.全局函数是一个有名字但不会捕获任何值的闭包
2.嵌套函数是一个有名字并且可以捕获其封闭函数域内值的闭包
3.闭包表达式时一个利用轻量级语法缩写的可以捕获其上下文中变量或者常量值的没有名字的闭包
1.利用上下文推断参数和返回值类型
2.单表达式闭包可以省略return关键字
3.参数名称简写
4.Trailing闭包语法
一般情况下我们采用如下方式使用sort
5 | func backwards(str1:String,str2:String)->Bool{ |
8 | let names=[ "LiSen" , "Dinal" , "Apple" , "Swift" ] |
9 | let reverse=sort(names, backwards) |
但是我们会发现这个写法是如此的繁琐,那么我们可以采用如下的闭包写法
2 | let names=[ "LiSen" , "Dinal" , "Apple" , "Swift" ] |
3 | let reverse=sort(names,{(s1:String,s2:String)->Bool in s1>s2}) |
如果闭包只有一条语句,那么我们可以省略掉return语句。
由于闭包能够自动推断参数类型,并且可以采用参数简写的方式,我们可以进一步缩减上面的语句。
4 | let names=[ "LiSen" , "Dinal" , "Apple" , "Swift" ] |
5 | let reverse=sort(names,{ $0 > $1}) |
对于上面的闭包,更简单的写法如下
2 | let names=[ "LiSen" , "Dinal" , "Apple" , "Swift" ] |
3 | let reverse=sort(names, >) |
3 | 0: "Zero" ,1: "One" ,2: "Two" ,3: "Three" ,4: "Four" ,5: "Five" ,6: "Six" ,7: "Seven" ,8: "Eight" ,9: "Nine" |
5 | let numbers = [1990,629] |
7 | (var number) -> String in{ |
10 | output=digiNumber[number%10]!+output |
4 | func MakeIncrement(forIncrement amount:Int)-> ()->Int{ |
6 | func Increment() -> Int{ |
12 | let increment = MakeIncrement(forIncrement: 10) |
swift会决定捕获时饮用还是拷贝值,同时swift也会处理变量的内存引用。
如果闭包分配给一个类实例的属性,并且改闭包通过指向该实例或其成员来捕获了该实例,你将创建一个在闭包和实例间的强引用环。
闭包是引用类型
http://www.iamlisen.com/swift-closure.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉:
投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。