在 UIView 闭包中将变量设置为已定义的惰性变量会导致引用问题

Setting a variable to a defined lazy var within a UIView closure cause reference problems

最近,我在做我的一个项目,我想要多个标签具有相同的字体、文本颜色和属性,除了它们的文本。

这是我写的代码:

lazy var profileLabel: UILabel = {
    let label = UILabel()
    label.font = .displayNameLabel
    label.textColor = .profileLabel
    label.numberOfLines = .numberOfLines
    label.textAlignment = .center
    label.translatesAutoresizingMaskIntoConstraints = false

    return label
}()

lazy var displayName: UILabel = {
    let label = profileLabel
    label.text = "Kevin"

    return label
}()

lazy var countryLabel: UILabel = {
    let label = profileLabel
    label.text = "US"

    return label
}()

如您所见,为了解决我的问题,我创建了一个标签,它具有我想要的所有其他标签的所有属性。对于我的其他标签,我认为我正在通过键入 let label = profileLabel 创建一个新标签。但事实证明,我不是。在连续调用设置文本和添加标签到我的视图后,实际上只显示了 1 个标签,这是最后添加的标签;所以在这种情况下,它将是 countryLabel

在我看来,在我对 let label = profileLabel 的所有调用中,我只是在创建对同一个 profileLabel 的引用。如果是这种情况,将 lazy var profileLabel 更改为 var profileLabel 会解决此问题并在每次调用 profileLabel 时创建一个具有所需属性的新标签吗?

您打算使用 swift 的计算 属性。但是没有弄对。您的配置文件标签应该定义如下。

var profileLabel: UILabel {
   get {
      let label = UILabel()
      label.font = .displayNameLabel
      label.textColor = .profileLabel
      label.numberOfLines = .numberOfLines
      label.textAlignment = .center
      label.translatesAutoresizingMaskIntoConstraints = false
      return label
   }
}