闭包学习

Block的基本学习

功能: 保存一段代码, 在需要的时候执行

  • OC定义属性
    @property (nonatomic, copy) void(^andersonBlock)();

Swift闭包

  • 闭包的基本格式
    {
    (形参列表) ->(返回值)
    in // 用于区分形参, 返回值和需要执行的代码
    需要执行的代码
    }

  • 闭包的几种格式
    1> 将闭包通过实参传递给参数
    2> 如果闭包是一个函数的最后一个参数, 那么闭包可以写在函数()后面
    3> 如果函数只接受一个参数, 而且这个参数是闭包, 那么()可以省略

  • 闭包的简写
    1> 如果闭包没有参数, 没有返回值, 那么 "() -> () in" 可以省略

闭包的返回值和参数

  • 示例:
    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){
// 代码块
// 一个函数, 传入2个闭包
}

闭包的循环引用问题:

  • 使用weak关键字修饰
    weak var weakSelf = self // 需要注意, 在闭包当中使用weakSelf必须用!修饰

你可能感兴趣的:(闭包学习)