Swift小知识点之懒加载(lazy)
一,懒加载情景
-
全局的常量/变量都是懒加载的,不需要标记lazy;(补充:Swift的static和ObjC的不一样,只能在类型定义中使用)
![]()
-
标记为
static的存储型的类型属性(常量变量)也是懒加载的,不需要标记lazy;(补充:static可以修饰存储型的和计算型的类型属性,class可以修饰类类型的计算型的类型属性) -
延迟属性:必须使用
lazy var标记;(延迟属性只能使用var修饰,不能使用let修饰)
二,延迟属性与闭包
-
延迟属性使用
lazy var标记声明,其初始值可以使用直接方式创建,也可以使用闭包方式创建;// 直接方式创建 lazy var person1: Person = Person() // 闭包方式创建 lazy var person2: Person = { let person = Person() p.name = "Tom" print("Tom...") return person }() -
闭包不仅仅可以给延迟属性(lazy var)设置初始值,也可以给全局的常/变量、类的属性、对象的属性进行初始值,计算属性本质通过闭包实现的;
let i = { return 0 }() class Person { static let a = { return 1 }()
var b = { return 2 }() } -
在布局UI控件的时候,也可以使用闭包方式来完成初始化赋值,这样更便于复用、更简洁;
let leftButton: UIButton = { let button = UIButton(frame: buttonSize) button.backgroundColor = .black button.titleLabel?.text = "left" return button }() let rightButton: UIButton = { let button = UIButton(frame: buttonSize) button.backgroundColor = .black button.titleLabel?.text = "right" return button }() -
延迟属性使用闭包方式创建,在闭包中使用self不会产生循环引用;全局的常/变量、类的属性、对象的属性使用闭包方式创建,在闭包中无法使用self;

浙公网安备 33010602011771号