Ios 在闭包中使用self时,Swift必须对存储属性使用lazy?

Ios 在闭包中使用self时,Swift必须对存储属性使用lazy?,ios,swift,Ios,Swift,我为UITableViewCell创建了子类,并希望为子视图添加UILabel。我使用存储属性获取UILabel,如下所示 class ZXArtistListCell: UITableViewCell { lazy var label: UILabel = { let view = UILabel() self.contentView.addSubview(view) return view }() } 但是,当我删除lazy或者用let替换lazy var时

我为UITableViewCell创建了子类,并希望为子视图添加UILabel。我使用存储属性获取UILabel,如下所示

class ZXArtistListCell: UITableViewCell {
  lazy var label: UILabel = {
    let view = UILabel()
    self.contentView.addSubview(view)
    return view
  }()
}
但是,当我删除
lazy
或者用
let
替换
lazy var
时,它会给我错误

类型为“(NSObject)->ZXArtistCell”的值没有成员“contentView”

那是什么意思

必须始终将惰性属性声明为变量(使用var 关键字),因为在 实例初始化完成。常量属性必须始终保持不变 在初始化完成之前具有值,因此无法 被宣布为懒惰的


当您使用lazy声明标签时,初始值直到第一次使用时才会计算。 因此,实例化视图可能已经完成

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

使用
lazy var
意味着编译器可以验证分配给label的值在self成为有效对象之前不会被访问,因为在类的所有其他成员初始化之前,无法调用label