懒加载的介绍
- Swift中也存在懒加载的方法
- 苹果的设计思想,希望所有的对象在使用时再真正加载到内存中
- 与OC不同的是,Swift中存在专门的关键字用于实现懒加载
- lazy关键字可以用于定义某一个属性的懒加载
懒加载的使用
- 格式:
lazy var 变量: 类型 = {/**创建变量代码*/}()
- 懒加载的使用
//懒加载的本质是:在第一次使用的时候执行闭包,将闭包的返回值赋值给属性
//lazy的作用只会赋值一次
lazy var items : [String] = {
() -> [String] in
return["jim","jack","rose"]
}()
注意:上述闭包的表达式是在属性定义的时候直接赋值给属性的,闭包后面跟的()
是初始化的意思。
懒加载闭包的简化写法
懒加载方法的本质为闭包,但是有时候闭包的格式有些繁琐,需要参数定义,返回值,in
关键字引导的函数体等等!存在不需要传入参数的情况,还需要写繁琐的格式,这就很尴尬了!但是苹果怎么会让你尴尬呢?
- 单表达式闭包隐式返回
单行表达式闭包可以通过省略return
关键字来隐式返回单行表达式结果。
上述懒加载方法可以这样写:
lazy var items : [String] = {
() -> [String] in
["jim","jack","rose"]
}()
因为定义属性是明确需要返回一个字符串数组,函数体中只包含了单条语句,该语句返回一个字符串数组,因此这里没有歧义,return
关键字可以省略。
- 参数名称缩写
Swift 自动为内联闭包提供了参数名称缩写功能,你可以直接通过$0,$1,$2
来顺序调用闭包的参数,以此类推。
如果你在闭包表达式中使用参数名称缩写,你可以在闭包定义中省略参数列表,并且对应参数名称缩写的类型会通过函数类型进行推断。in
关键字也同样可以被省略,因为此时闭包表达式完全由闭包函数体构成。
当然当闭包参数不存在的时候,也可以省略参数列表和in
关键字,闭包表达式完全由闭包函数体构成!
lazy var items : [String] = {
["jim","jack","rose"]
}()
Zeb
参考地址:https://github.com/numbbbbb/the-swift-programming-language-in-chinese