Swift學習筆記4-函數(shù)、閉包、懶加載

函數(shù)

Swift定義函數(shù)的格式:
語義:將前面計算的結(jié)果返回給 ->返回值
func 函數(shù)名稱(參數(shù)列表) -> 返回值
{
        執(zhí)行代碼
}

練習

沒有返回值沒有參數(shù)
//創(chuàng)建方法一
func talk1() -> Void
{
    print("Swift")
}
talk1()
//創(chuàng)建方法二
func talk2() ->()
{
    print("Swift")
}
talk2()
//創(chuàng)建方法三
func talk3()
{
    print("Swift")
}
talk3()

有返回值沒有參數(shù)
func getString() -> String
{
    return "Swift"
}
getString()

有參數(shù)沒有返回值
func sum1(a:Int,b:Int)
{
    print(a + b)
}
sum1(a: 4, b: 4)

有參數(shù)有返回值
func sum2(a:Int,b:Int) -> Int
{
    return a + b;
}
print(sum2(a: 4, b: 4))
  • 總結(jié)
    • 如果沒有返回值, -> 返回值 可以省略
    • 默認情況下,在調(diào)用函數(shù)時,第一個參數(shù)名是省略的

閉包

  • 閉包定義
閉包格式
        {
            (參數(shù)) -> 返回值類型 
            in
            執(zhí)行語句
        }

實例:
        loadData { () -> () in
            print("執(zhí)行回調(diào)")
        }
  • 閉包三種簡化
1.如果沒有參數(shù), 沒有返回值, in和in之前的東西可以省略
2.如果閉包是函數(shù)的最后一個參數(shù), 可以寫在()后面  -- 尾隨閉包
3.如果只有一個閉包參數(shù), 那么()也可以省略  -- 尾隨閉包
        loadData ({
            print("執(zhí)行回調(diào)")
        })
      
        loadData(){
            print("執(zhí)行回調(diào)")
        }
        loadData{
            print("執(zhí)行回調(diào)")
        }

func loadData(_ finished: () -> ()){
        print("耗時操作")
        
        // 回調(diào)
        finished()
 }

  • 閉包參數(shù)
loadData("xiaoming") { () -> () in
            print("執(zhí)行回調(diào)")
 }

func loadData3(_ name: String, finished: () -> ()){
        print("name = \(name)")
        finished()
}
  • 閉包返回值
  • 閉包的循環(huán)引用
weak var weakSelf = self
demo("zhangsan") { (_) -> Int in
    print(weakSelf?.view.backgroundColor)
    return 20
}

懶加載創(chuàng)建方式

//MARK: -View懶加載
lazy var View: UIView = {
    let view = UIView(frame:CGRect(x: 0, y: 0, width: 100, height: 100))
    view.backgroundColor = UIColor.redColor()
    return view
}()

//MARK: -TableView懶加載
    lazy var zyTableView: UITableView = {
        let tempTableView = UITableView (frame: self.view.bounds, style: UITableViewStyle.plain)
        tempTableView.delegate = self
        tempTableView.dataSource = self
        return tempTableView
    }()

//MARK: -數(shù)組懶加載
lazy var dataList: [String] = {
        print("我懶加載了")
        return ["lnj", "lmj", "why"]
    }()
  • 格式:
lazy var 變量: 類型 = { 創(chuàng)建變量代碼 }()
  • 懶加載的寫法本質(zhì)上是定義并執(zhí)行一個閉包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容