`UILabel`中`textColor`的延迟实例化会引发错误

时间:2017-04-10 14:51:43

标签: ios swift uilabel lazy-loading textcolor

如果我取消注释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”。

2 个答案:

答案 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属性。