码迷,mamicode.com
首页 > 其他好文 > 详细

SWIFt闭包

时间:2014-06-25 09:50:46      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:des   style   class   code   http   com   

闭包的三种形式


1.全局函数是一个有名字但不会捕获任何值的闭包
2.嵌套函数是一个有名字并且可以捕获其封闭函数域内值的闭包
3.闭包表达式时一个利用轻量级语法缩写的可以捕获其上下文中变量或者常量值的没有名字的闭包

SWIFT闭包中的一些特点


1.利用上下文推断参数和返回值类型
2.单表达式闭包可以省略return关键字
3.参数名称简写
4.Trailing闭包语法

闭包表达式


一般情况下我们采用如下方式使用sort

 

1 // Playground - noun: a place where people can play
2  
3 import Cocoa
4  
5 func backwards(str1:String,str2:String)->Bool{
6     return str1>str2
7 }
8 let names=["LiSen","Dinal","Apple","Swift"]
9 let reverse=sort(names, backwards)

但是我们会发现这个写法是如此的繁琐,那么我们可以采用如下的闭包写法

1 import Cocoa
2 let names=["LiSen","Dinal","Apple","Swift"]
3 let reverse=sort(names,{(s1:String,s2:String)->Bool in s1>s2})
4 reverse

如果闭包只有一条语句,那么我们可以省略掉return语句。
由于闭包能够自动推断参数类型,并且可以采用参数简写的方式,我们可以进一步缩减上面的语句。

1 // Playground - noun: a place where people can play
2  
3 import Cocoa
4 let names=["LiSen","Dinal","Apple","Swift"]
5 let reverse=sort(names,{ $0 > $1}) //$0代表第一个参数,$1代表第二个参数,参数名称必须由0开始
6 reverse

 

运算符函数


对于上面的闭包,更简单的写法如下

 

1 import Cocoa
2 let names=["LiSen","Dinal","Apple","Swift"]
3 let reverse=sort(names, >)
4 reverse
Trailing闭包
1 import Cocoa
2 let digitNumber=[
3     0:"Zero",1:"One",2:"Two",3:"Three",4:"Four",5:"Five",6:"Six",7:"Seven",8:"Eight",9:"Nine"
4 ]
5 let numbers = [1990,629]
6 numbers.map(
7     (var number)  -> String in{ //var定义变量参数用于在下面修改
8     var output = "";
9     while(number>0){
10     output=digiNumber[number%10]!+output //!防止查找失败返回错误
11     number/=10;
12     }
13     return output
14     }
15      
16 )
捕获
1 // Playground - noun: a place where people can play
2  
3 import Cocoa
4 func MakeIncrement(forIncrement amount:Int)-> ()->Int{ //MakeIncrement外部名称是forIncrement,返回一个无参的返回值是Int类型的函数
5     var totalAmount = 5
6     func Increment() -> Int{
7         totalAmount += amount
8         return totalAmount
9     }
10     return Increment
11 }
12 let increment = MakeIncrement(forIncrement: 10)
13 increment() //15

swift会决定捕获时饮用还是拷贝值,同时swift也会处理变量的内存引用。
如果闭包分配给一个类实例的属性,并且改闭包通过指向该实例或其成员来捕获了该实例,你将创建一个在闭包和实例间的强引用环。
闭包是引用类型
 
 

SWIFt闭包,布布扣,bubuko.com

SWIFt闭包

标签:des   style   class   code   http   com   

原文地址:http://www.cnblogs.com/ilisen/p/3807324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!