日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初探swift语言的学习笔记十(block) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 轉載請注明出處 如果覺得文章對你有所幫助,請通過留言或關注微信公眾帳號fengsh998來支持我,謝謝!


在前面一些學習中,原本把閉包給理解成了block盡管有很多相似之處,但block還是有他自己的獨特之外。近日,在寫oc/swift混合編碼時,有時候需要swift回調oc,oc回調swift 。

因此我把swift中的 block 常見的聲明和寫法作一個總結。以免后續忘了,好查閱。廢話不說多,上例子:

[cpp]?view plaincopy
  • //??
  • //??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了,因為生命周其中,(理想狀態)可能為nil所以用???
  • ????var?blockPropertyB?:?funcBlockB!??//這寫法也可以初始時為nil了,因為生命周其中,(理想狀態)認為不可能為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)??
  • ????????}??
  • ????}??
  • }??

  • 執行測試碼:

    [cpp]?view plaincopy
  • 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?執行")??
  • ????})??
  • ??
  • 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聲明和使用
    下面是輸出結果

    [cpp]?view plaincopy
  • 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?執行??
  • 5*400?+?6*1000?is?8000??
  • sumprint?func?print:parame?:結果是?5?/?6?=?0??
  • 最終果結是?5*5+6*5?=?55??


  • 總結

    以上是生活随笔為你收集整理的初探swift语言的学习笔记十(block)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。