初探swift语言的学习笔记十(block)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                初探swift语言的学习笔记十(block)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            作者:fengsh998
 
 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341
 
 轉載請注明出處
 
 如果覺得文章對你有所幫助,請通過留言或關注微信公眾帳號fengsh998來支持我,謝謝!
 
 
 //??  //??blockDemo.swift??  //??swiftDemo??  //??  //??Created?by?apple?on?14-6-29.??  //??Copyright?(c)?2014年?fengsh.?All?rights?reserved.??  //??  ??  import?Foundation??  ??  //無參無返回值??  typealias?funcBlock?=?()?->?()?//或者?()?->?Void??  //返回值是String??  typealias?funcBlockA?=?(Int,Int)?->?String??  //返回值是一個函數指針,入參為String??  typealias?funcBlockB?=?(Int,Int)?->?(String)->()??  //返回值是一個函數指針,入參為String?返回值也是String??  typealias?funcBlockC?=?(Int,Int)?->?(String)->String??  ??  class?blockDemo??  {??  ????//block作為屬性變量??  ????var?blockProperty?:?(Int,Int)?->?String?=?{a,b?in?return?""/**/}?//?帶初始化方式??  ????var?blockPropertyNoReturn?:?(String)?->?()?=?{param?in?}??  ??????  ????var?blockPropertyA?:?funcBlockA???//這寫法就可以初始時為nil了,因為生命周其中,(理想狀態(tài))可能為nil所以用???  ????var?blockPropertyB?:?funcBlockB!??//這寫法也可以初始時為nil了,因為生命周其中,(理想狀態(tài))認為不可能為nil,所以用!??  ??????  ????init()??  ????{??  ????????println("blockPropertyA?=?\(blockPropertyA)?,?blockPropertyB?=?\(blockPropertyB)")??  ????????println("blockProperty?=?\(blockProperty)?,?blockPropertyNoReturn?=?\(blockPropertyNoReturn)")??  ????}??  ??????  ????func?testProperty(tag:Int)??  ????{??  ????????switch?(tag)??  ????????{??  ????????case?1:??  ????????????????self.blockPropertyNoReturn("OK?GOOD")??  ????????case?2:??  ????????????????if?let?exsistBlock?=?self.blockPropertyA??  ????????????????{??  ????????????????????let?result?=?self.blockPropertyA!(7,8)??  ????????????????????println("result?=?\(result)")??  ????????????????}??  ????????case?3:??  ????????????????if?let?exsistBlock?=?self.blockPropertyB??  ????????????????{??  ????????????????????let?fc?=?self.blockPropertyB(1,2)??  ????????????????????fc("輸出")??  ????????????????}??  ????????default:??  ????????????????let?ret?=?self.blockProperty(3,4)??  ????????????????println(ret)??  ????????}??  ????}??  ??????  ????//block作為函數參數??  ????func?testBlock(blockfunc:funcBlock!)//使用!號不需要再解包??  ????{??  ????????if?let?exsistblock?=?blockfunc??  ????????{??  ????????????blockfunc()?//無參無返回??  ????????}??  ????}??  ??????  ????func?testBlockA(blockfunc:funcBlockA!)??  ????{??  ????????if?let?exsistblock?=?blockfunc??  ????????{??  ????????????let?retstr?=?blockfunc(5,6)??  ????????????println(retstr)??  ????????}??  ????}??  ??????  ????func?testBlockB(blockfunc:funcBlockB!)??  ????{??  ????????if?let?exsistblock?=?blockfunc??  ????????{??  ???????????let?retfunc?=?blockfunc(5,6)??  ????????????retfunc("結果是")??  ????????}??  ????}??  ??????  ????func?testBlockC(blockfunc:funcBlockC!)??  ????{??  ????????if?let?exsistblock?=?blockfunc??  ????????{??  ????????????let?retfunc?=?blockfunc(5,6)??  ????????????let?str?=?retfunc("最終果結是")??  ????????????println(str)??  ????????}??  ????}??  }??  
 
執(zhí)行測試碼: var?bk?=?blockDemo()??  //block設置前,啥也沒有輸出??  bk.testProperty(0)??  bk.testProperty(1)??  bk.testProperty(2)??  bk.testProperty(3)??  println("==============設置block屬性================")??  ??  bk.blockProperty?=?{??  ????(a?:Int,b:Int)?->?String?in??  ????let?c?=?a*100+b??  ????return?"\(a)*100+\(b)?=?\(c)"??  }??  bk.testProperty(0)??  ??  bk.blockPropertyNoReturn?=?{??  ????(param:String)?->?()?in??  ????println("input?param?value?is?:?\(param)")??  }??  bk.testProperty(1)??  ??  bk.blockPropertyA?=?{??  ????(a:Int,b:Int)?->?String?in??  ????let?c?=?a*100+b*200??  ????return?"\(a)*100+\(b)*200?=?\(c)"??  }??  bk.testProperty(2)??  ??  bk.blockPropertyB?=?{??  ????(a:Int,b:Int)?->?(String)->()?in??  ????func?sumprint(result:String)??  ????{??  ????????let?c?=?a?+?b;??  ????????println("sumprint?func?print:parame?:\(result)?\(a)?+?\(b)?=?\(c)")??  ????}??  ??????  ????return?sumprint??  }??  bk.testProperty(3)??  println("==============屬性block完成================")??  ??  println("==============函數block為nil時無輸出================")??  bk.testBlock(nil)??  bk.testBlockA(nil)??  bk.testBlockB(nil)??  bk.testBlockC(nil)??  println("==============函數block操作================")??  bk.testBlock({??  ????????//do?something??  ????????println("無參無返回值block?執(zhí)行")??  ????})??  ??  bk.testBlockA({??  ????????(a:Int,b:Int)?->?String?in??  ????????let?c?=?a*400+b*1000??  ????????return?"\(a)*400?+?\(b)*1000?is?\(c)"??  ????})??  ??  bk.testBlockB({??  ????(a:Int,b:Int)?->?(String)->()?in??  ????func?sumprint(result:String)??  ????{??  ????????let?c?=?a?/?b;??  ????????println("sumprint?func?print:parame?:\(result)?\(a)?/?\(b)?=?\(c)")??  ????}??  ??????  ????return?sumprint??  ????})??  ??  bk.testBlockC({??  ????(a:Int,b:Int)?->?(String)->String?in??  ????????func?sumrsult(res:String)?->?String??  ????????{??  ????????????let?c?=?a*a+b*a??  ????????????return?"\(res)?\(a)*\(a)+\(b)*\(a)?=?\(c)"??  ????????}??  ????????return?sumrsult??  ????})??  
 
以上包括了block聲明和使用
下面是輸出結果 blockPropertyA?=?nil?,?blockPropertyB?=?nil??  blockProperty?=?(Function)?,?blockPropertyNoReturn?=?(Function)??  ??  ==============設置block屬性================??  3*100+4?=?304??  input?param?value?is?:?OK?GOOD??  result?=?7*100+8*200?=?2300??  sumprint?func?print:parame?:輸出?1?+?2?=?3??  ==============屬性block完成================??  ==============函數block為nil時無輸出================??  ==============函數block操作================??  無參無返回值block?執(zhí)行??  5*400?+?6*1000?is?8000??  sumprint?func?print:parame?:結果是?5?/?6?=?0??  最終果結是?5*5+6*5?=?55??  
 
 
                            
                        
                        
                        
 
 
在前面一些學習中,原本把閉包給理解成了block盡管有很多相似之處,但block還是有他自己的獨特之外。近日,在寫oc/swift混合編碼時,有時候需要swift回調oc,oc回調swift 。
因此我把swift中的 block 常見的聲明和寫法作一個總結。以免后續(xù)忘了,好查閱。廢話不說多,上例子:
[cpp]?view plaincopy
執(zhí)行測試碼:
[cpp]?view plaincopy
下面是輸出結果
[cpp]?view plaincopy
總結
以上是生活随笔為你收集整理的初探swift语言的学习笔记十(block)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 初探swift语言的学习笔记九(OC与S
- 下一篇: 初探swift语言的学习笔记十一(per
