初探swift语言的学习笔记十(block)

初探swift语言的学习笔记十(block),第1张

概述作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在前面一些学习中,原本把闭包给理解成了block尽管有很多相似之处,但block还是有他自己的独特之外。近日,在写oc/swift混合编码时,有时 作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!


在前面一些学习中,原本把闭包给理解成了block尽管有很多相似之处,但block还是有他自己的独特之外。近日,在写oc/swift混合编码时,有时候需要swift回调oc,oc回调swift 。

因此我把swift中的 block 常见的声明和写法作一个总结。以免后续忘了,好查阅。废话不说多,上例子:

[cpp] view plain copy // //blockDemo.swift //swiftDemo // //Createdbyappleon14-6-29. //copyright(c)2014年fengsh.Allrightsreserved. importFoundation //无参无返回值 typealiasfuncBlock=()->()//或者()->VoID //返回值是String typealiasfuncBlockA=(Int,Int)->String //返回值是一个函数指针,入参为String typealiasfuncBlockB=(Int,Int)->(String)->() //返回值是一个函数指针,入参为String返回值也是String typealiasfuncBlockC=(Int,Int)->(String)->String classblockDemo { //block作为属性变量 varblockProperty:(Int,Int)->String={a,binreturn""/**/}//带初始化方式 varblockPropertynoreturn:(String)->()={paramin} varblockPropertyA:funcBlockA?//这写法就可以初始时为nil了,因为生命周其中,(理想状态)可能为nil所以用? varblockPropertyB:funcBlockB!//这写法也可以初始时为nil了,因为生命周其中,(理想状态)认为不可能为nil,所以用! init() { println("blockPropertyA=\(blockPropertyA),blockPropertyB=\(blockPropertyB)") println("blockProperty=\(blockProperty),blockPropertynoreturn=\(blockPropertynoreturn)") } functestProperty(tag:Int) switch(tag) case1: self.blockPropertynoreturn("OKGOOD") case2: ifletexsistBlock=self.blockPropertyA letresult=self.blockPropertyA!(7,8) println("result=\(result)") } case3: ifletexsistBlock=self.blockPropertyB letfc=self.blockPropertyB(1,2) fc("输出") default: letret=self.blockProperty(3,4) println(ret) //block作为函数参数 functestBlock(blockfunc:funcBlock!)//使用!号不需要再解包 ifletexsistblock=blockfunc blockfunc()//无参无返回 functestBlockA(blockfunc:funcBlockA!) letretstr=blockfunc(5,6) println(retstr) functestBlockB(blockfunc:funcBlockB!) ifletexsistblock=blockfunc letretfunc=blockfunc(5,6) retfunc("结果是") functestBlockC(blockfunc:funcBlockC!) letretfunc=blockfunc(5,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> letstr=retfunc("最终果结是") println(str) } @H_336_404@
执行测试码:

@H_445_419@ varbk=blockDemo() //block设置前,啥也没有输出
bk.testProperty(0) bk.testProperty(1) bk.testProperty(2) bk.testProperty(3) println("==============设置block属性================") bk.blockProperty={ (a:Int,b:Int)->Stringin letc=a*100+b return"\(a)*100+\(b)=\(c)" bk.testProperty(0) bk.blockPropertynoreturn={ (param:String)->()in println("inputparamvalueis:\(param)") bk.blockPropertyA={ (a:Int,b:Int)->Stringin letc=a*100+b*200 return"\(a)*100+\(b)*200=\(c)" bk.blockPropertyB={ funcsumprint(result:String) letc=a+b; println("sumprintfuncprint:parame:\(result)\(a)+\(b)=\(c)") returnsumprint bk.testProperty(3) println("==============属性block完成================") println("==============函数block为nil时无输出================") bk.testBlock(nil) bk.testBlockA(nil) bk.testBlockB(nil) bk.testBlockC(nil) println("==============函数block *** 作================") bk.testBlock({ //dosomething println("无参无返回值block执行") }) bk.testBlockA({ letc=a*400+b*1000 return"\(a)*400+\(b)*1000is\(c)" bk.testBlockB({ letc=a/b; println("sumprintfuncprint:parame:\(result)\(a)/\(b)=\(c)") }) bk.testBlockC({ funcsumrsult(res:String)->String letc=a*a+b*a return"\(res)\(a)*\(a)+\(b)*\(a)=\(c)" returnsumrsult }) @H_336_404@ 以上包括了block声明和使用
下面是输出结果

@H_445_419@ blockPropertyA=nil,blockPropertyB=nil blockProperty=(Function),blockPropertynoreturn=(Function) ==============设置block属性================ 3*100+4=304 inputparamvalueis:OKGOOD result=7*100+8*200=2300 sumprintfuncprint:parame:输出1+2=3 ==============属性block完成================ ==============函数block为nil时无输出================ ==============函数block *** 作================ 无参无返回值block执行 5*400+6*1000is8000 sumprintfuncprint:parame:结果是5/6=0 最终果结是5*5+6*5=55 @H_336_404@ 总结

以上是内存溢出为你收集整理的初探swift语言的学习笔记十(block)全部内容,希望文章能够帮你解决初探swift语言的学习笔记十(block)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1084788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存