Block的基本學習
功能: 保存一段代碼, 在需要的時候執(zhí)行
- OC定義屬性
@property (nonatomic, copy) void(^andersonBlock)();
Swift閉包
閉包的基本格式
{
(形參列表) ->(返回值)
in // 用于區(qū)分形參, 返回值和需要執(zhí)行的代碼
需要執(zhí)行的代碼
}閉包的幾種格式
1> 將閉包通過實參傳遞給參數(shù)
2> 如果閉包是一個函數(shù)的最后一個參數(shù), 那么閉包可以寫在函數(shù)()后面
3> 如果函數(shù)只接受一個參數(shù), 而且這個參數(shù)是閉包, 那么()可以省略閉包的簡寫
1> 如果閉包沒有參數(shù), 沒有返回值, 那么 "() -> () in" 可以省略
閉包的返回值和參數(shù)
- 示例:
override fun viewDidLoad(){
super.viewDidLoad()
createScrollView ( { ( ) -> Int in
return 5
}){ (index) -> UIView in
let view = UIButton()
// 設置View的屬性(標題, 文字顏色等信息)
return view
}
}
func createScrollView(buttonCount: ( ) -> Int, btnWithIndex:(index: Int) -> UIView){
// 代碼塊
// 一個函數(shù), 傳入2個閉包
}
閉包的循環(huán)引用問題:
- 使用weak關鍵字修飾
weak var weakSelf = self // 需要注意, 在閉包當中使用weakSelf必須用!修飾