Swift基礎之07-閉包和懶加載

閉包

閉包的用法和block類似,沒有標出的地方請參考block

  • 1, 閉包的基本格式:
  • 定義:
//閉包名稱: (參數01類型,參數02類型...)->(返回值類型)
//如下:
dataClosure: (String)->()//1個參數,無返回值
  • 實現:
/*
{參數01,參數02... in
        //code你的操作
        return 返回值//如果有返回值,需要返回,沒有返回值無需這一步
}
*/
//如下:
var myClosure: (String,Int)->(String) = {name,age in
        print("this is a closure,parameter is -----\(name)---\(age)")
        return "this is a closure,parameter is -----\(name)---\(age)"
}
  • 使用:
//例01
var dataClosure: (String)->() = {name in
        print("this is a closure,parameter is -----\(name)")
    }
//例02
var myClosure: (String,Int)->(String) = {name,age in
        print("this is a closure,parameter is -----\(name)---\(age)")
        return "this is a closure,parameter is -----\(name)---\(age)"
}
  • 調用
//例01調用
dataClosure("zhangdanfeng")//無返回值
//例02調用
let closureResult = myClosure("zhang",10)//有返回值
  • 2,這里再舉一個網絡請求的簡單封裝實例:
//請求方法
func getData (dataClosure: @escaping (_ dataStr: String)->()){
    self.dataClosure = dataClosure;
    DispatchQueue.global().async {
        print("當前線程是:\([Thread .current]),在當前線程進行網絡請求")
        //延遲三秒鐘進行模擬網絡
        DispatchQueue.main.asyncAfter(deadline: .now()+3, execute: { 
            let resultStr = "this is the data from net"
            //得到數據后回到主線程進行相應的操作
            print(resultStr + "當前線程是\([Thread .current])");
            dataClosure(resultStr);
        })
    }
}
  • 在控制器中調用該方法
        //常規閉包實現的寫法
        imNetwork.getData(dataClosure: {(result) in
            print("控制器中得到結果---\(result)---\([Thread .current]) ")
            print("常規閉包實現的寫法")
        })
        
        /*
        //常規閉包實現的寫法,內部有循環引用
        imNetwork.getData(dataClosure: { [weak self] (result) in
            print("控制器中得到結果---\(result)---\([Thread .current]) ")
            self?.view.backgroundColor = UIColor.blue
        })
        //系統提示默認就是給出的尾隨閉包
        //這里順便講一下尾隨閉包的概念:當一個閉包是函數中最后一個參數(或者是唯一的參數)的時候,可以直接把閉包從括號內拿出來放在函數后面如下:
        imNetwork.getData() { (result) in
            print("尾隨閉包--最后一個參數,但不是唯一的參數的時候,括號不可以省略")
        }
        //如果是唯一參數,括號內就沒有內容可以省略
        imNetwork.getData { (result) in
            print("尾隨閉包,唯一的參數肯定也是最后一個參數,括號內就沒有實際內容,可以省略")
        }
         */

懶加載

  • 1,懶加載方式一
  • 這種方式是直接創建賦值,比如btn內部的屬性是不能在創建的時候進行賦值的
lazy var names = ["z","d","f"]
lazy var btn = UIButton()
  • 2,懶加載方式二
  • 這種方式是以閉包的形式進行創建,然后調用閉包執行,相當于把閉包當做參數,可以在閉包內部設置各種屬性,比如btn的frame,color等
lazy var names01 = { () -> [String] in
    print("lazy")
    let names = ["zhang","dan","feng"]
        return names
}()
lazy var btn01 = { () -> UIButton in
    print("btn-lazy")
    let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
    // btn.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
    btn.backgroundColor = UIColor.red
    return btn
}()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容