在关闭时使用self时,Swift必须对存储属性使用lazy吗?

时间:2017-06-22 11:44:25

标签: ios swift

我为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'

那么,这意味着什么?

2 个答案:

答案 0 :(得分:1)

当您使用延迟声明标签时,在第一次使用之前不会计算初始值。 所以实例化视图可能已经完成。

但是在Swift中使用let的概念,必须先初始化let变量,然后才能使用self

使用lazy var意味着编译器可以验证分配给标签的值在self是有效对象之前不会被访问,因为它无法调用标签直到所有其他班级成员已经初始化。

答案 1 :(得分:0)

  

您必须始终将惰性属性声明为变量(使用var   关键字),因为它的初始值可能直到之后才被检索   实例初始化完成。常量属性必须始终   在初始化完成之前有一个值,因此不能   宣称是懒惰的。

Apple Document