Swift的懒加载与闭包

闭包
闭包和OC中的Block非常相似,OC中的block类似于匿名函数,闭包是用来定义函数,他们的作用都是 保存一段代码,在需要的时候执行。

// oc 中的block
void (^myblock)(int a,int b);

myblock = ^(int a,int b){
    // ...
}

// swift 闭包
{
(参数) -> 返回值类型 
       in
        执行语句
}

{ 
(parameters) -> returnType 
        in    
    statements
}

闭包简化 - 尾随闭包

func someFunctionThatTakesAClosure(closure: () -> Void) {
    // 函数体部分
}

// 以下是不使用尾随闭包进行函数调用
someFunctionThatTakesAClosure({
    // 闭包主体部分
})

// 以下是使用尾随闭包进行函数调用
someFunctionThatTakesAClosure() {
  // 闭包主体部分
}

someFunctionThatTakesAClosure{ () -> Void in
    // 闭包主体部分
}



 1.如果没有参数, 没有返回值, inin之前的东西可以省略
 2.如果闭包是函数的最后一个参数, 可以写在()后面  -- 尾随闭包
 3.如果只有一个闭包参数, 那么()也可以省略  -- 尾随闭包

懒加载
    lazy var table: UILabel = {
     
        return UILabel()
        
    }()


    var bb:(() -> UILabel) = {() -> UILabel in
        return UILabel()
    }
    
    lazy var nihao:UILabel = self.bb()
    lazy var nihaohao:UILabel = {() -> UILabel in
       
        return UILabel()
    }()
  1. 需要的时候初始化内存,对内存开销较小,节省内部资源
  2. 代码初始化放在一起,代码块比较好划分,方便别人和自己阅读
 import UIKit

class ViewController: UIViewController {

    // Swift中的懒加载会在第一个访问的时候执行
    // 懒加载其实就是一个提前准备好的的闭包
    lazy var dataList: [String] = {
        print("我懒加载了")
        return ["zj", "hq", "wl"]
    }()
    
    let demoFunc = {
        () -> [String]
        in
        print("我懒加载了")
        return ["ny", "ny1", "ny2"]
    }
    // 注意懒加载一定要用var
    lazy var dataList2: [String] = self.demoFunc()
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print(dataList)
        print(dataList)
        
        print(demoFunc())
        
        print(dataList2)
        print(dataList2)
    }
}

打印结果:
我懒加载了
["zj", "hq", "wl"]
["zj", "hq", "wl"]
我懒加载了
["ny", "ny1", "ny2"]
我懒加载了
["ny", "ny1", "ny2"]
["ny", "ny1", "ny2"]

懒加载格式:

lazy var 变量: 类型 = { 创建变量代码 }()

参考原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值