如果我取消注释self.numberLabel.textColor = UIColor.black
,则构建编译但在模拟器中崩溃。
lazy public var numberLabel: UILabel = {
self.numberLabel.textColor = UIColor.black
return UILabel(frame: CGRect.init(x: 10, y: 40, width: self.bounds.size.width, height: 20))
}()
错误说明:“EXC_BAD_ACCESS”。
答案 0 :(得分:1)
惰性存储属性是一个初始值不是的属性 计算直到第一次使用。你表示存储懒惰 通过在声明之前编写惰性修饰符来进行属性。
示例代码段 - Swift 3.x
lazy public var numberLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 20, y: 20, width: 200, height: 21))
label.textColor = UIColor.black
return label
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(numberLabel)
numberLabel.text = "Good"
}
答案 1 :(得分:1)
在设置之前你指的是numberLabel,最好的方法是:
lazy public var numberLabel: UILabel = {
let label = UILabel(frame: CGRect.init(x: 10, y: 40, width: self.bounds.size.width, height: 20))
label.textColor = UIColor.black
return label
}()
正如你可以看到第一个“let label =”创建标签,然后可以执行所有初始化(如textcolor),最后我们返回标签,分配给lazy属性。