我为UITableViewCell创建子类,并希望为子视图添加UILabel。我使用存储的属性来获取UILabel,就像这样
class ZXArtistListCell: UITableViewCell {
lazy var label: UILabel = {
let view = UILabel()
self.contentView.addSubview(view)
return view
}()
}
但是,当我删除lazy
或将lazy var
替换为let
时,它会给我错误,
类型的价值'(NSObject) - > ZXArtistCell'没有会员' contentView'
那么,这意味着什么?
答案 0 :(得分:1)
当您使用延迟声明标签时,在第一次使用之前不会计算初始值。 所以实例化视图可能已经完成。
但是在Swift中使用let的概念,必须先初始化let
变量,然后才能使用self
。
使用lazy var
意味着编译器可以验证分配给标签的值在self是有效对象之前不会被访问,因为它无法调用标签直到所有其他班级成员已经初始化。
答案 1 :(得分:0)
您必须始终将惰性属性声明为变量(使用var 关键字),因为它的初始值可能直到之后才被检索 实例初始化完成。常量属性必须始终 在初始化完成之前有一个值,因此不能 宣称是懒惰的。