Ios 在闭包中使用self时,Swift必须对存储属性使用lazy?
我为UITableViewCell创建了子类,并希望为子视图添加UILabel。我使用存储属性获取UILabel,如下所示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时
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