时间:2021-05-02
前言
在项目开发中经常会去查iOS闭包怎么写,因为它的语法太古怪,两种语言写法不一,经常搞混,干脆记录下常用的写法算了
闭包定义
闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。
OC中的block与Swift中的尾随闭包都起到了将参数作为返回值的作用,也就是常说的回调。
1. block的使用
在OC中block主要分为三种,分别是
(1)_NSConcreteGlobalBlock 全局静态,
(2)_NSConcreteStackBlock 保存在栈中,出函数作用域就销毁,
(3)_NSConcreteMallocBlock 保存在堆中,retainCount == 0销毁。
而我们在使用block时大致分为以下几步:
? 1 2 3 4 5 6 7 //1.使用typedef定义一个block typedef void(^CallBack1)(); //不带参数 typedef void(^CallBack2)(NSString *test); //带参数 //2.通过属性声明 @property (nonatomic, copy) CallBack callBack; //3.通过函数方法声明 - (void)functionCallBack:(CallBack)callBack;其实呢,如果写的比较熟练了,也可以连着一起定义:
? 1 2 3 4 @property (nonatomic, strong) void(^ completed1)();//不带参数 @property (nonatomic, strong) void(^ completed2)(NSString *test);//带参数 - (void) functionCallBack:(void(^)())completed1;//不带参数 - (void) functionCallBack:(void(^)(NSString *test))completed2;//带参数2. 尾随闭包的使用
在Swift中,闭包是一段自包含的函数代码块,可以在代码中使用和传递,相当于一个匿名函数。
那么尾随闭包就是这个函数的最后一个参数是一个闭包,所以规定这个闭包既可以写在函数的参数括号里面,也可以直接放在最后面来使用,就像重新给这个函数定义了一次一样。
并且,它的写法和block很相似:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //1.使用typealias定义 typealias functionBlock1 = () -> ()//不带参数 typealias functionBlock2 = (String) -> ()//带参数 //2.声明函数体 func blockTest1(complete: (functionBlock1)) -> () { complete() } func blockTest2(complete: (functionBlock2)) -> () { let re: String = "Cookie" complete(re) } //3.使用函数 blockTest1 {} blockTest2{ (result) in print(result) }同样的,如果写的比较熟练了,也可以连着一起定义:
? 1 2 3 4 5 6 7 8 9 10 11 //1.声明函数体 func blockTest(complete: (_ result: String)->()) -> () { let re: String = "Cookie" complete(re) } //2.使用函数 blockTest { (result) in print(result) }除此之外,swift中的闭包还包括逃逸闭包,这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸,多用来做函数回调,与Objective-C里的Block有异曲同工之妙。自动闭包,作为参数传递给函数时,可以将闭包定义为自动闭包(使用关键字@autoclosure),这样传递参数时,可以直接传递一段代码(或者一个变量、表达式),系统会自动将这段代码转化成闭包。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://www.jianshu.com/p/9794524e9247
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
闭包(Closures)是独立的函数代码块,能在代码中传递及使用。Swift中的闭包与C和Objective-C中的代码块及其它编程语言中的匿名函数相似。闭包可
前言闭包是功能性自包含模块,可以在代码中被传递和使用。Swift中的闭包与C和Objective-C中的blocks以及其他一些编程语言中的lambdas比较相
前言Objective-C作为一门资历很老的语言,添加了Block这个特性后深受广大iOS开发者的喜爱。在Swift中,对应的概念叫做Closure,即闭包。虽
最近一直在看Java的相关东西,因为我们在iOS开发是,无论是Objective-C还是Swift中,经常会用到委托代理回调,以及Block回调或者说是闭包回调
Swift和Objective-C混编注意事项整理:前言Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低