获取错误的默认值

Getting wrong default value

我写了一个自定义的 TableViewCell class,它可以是 return 上面设置的 accessibilityLabel,或者只是 return 它的 class 名称accessibilityLabel。尽管以下两个实现之一没有按预期工作。我试图理解为什么...

returns 正确 class姓名

class BaseTableViewCell: UITableViewCell {
    var _acsLabel: String?

    override var accessibilityLabel: String?{
        get{
            return _acsLabel ?? "\(type(of: self))"
        }set (newValue) {
            _acsLabel = newValue ?? ""
        }
    }
}

returns 不正确 class 姓名

class BaseTableViewCell: UITableViewCell {
    var _acsLabel: String? = "\(type(of: self))"

    override var accessibilityLabel: String?{
        get{
            return _acsLabel
        }set (newValue) {
            _acsLabel = newValue ?? ""
        }
    }
}

两个版本都正确 return 如果我设置 accessibilityLabel 的值,但是如果没有设置默认值,它们 return 是不同的。

例如我子class UserNameTableViewCell 关闭我的 BaseTableViewCell class 并且 设置 accessibilityLabel 然后我自己:

这是为什么?!

self 在第二个版本的代码中调用时没有初始化,这就是为什么它显示超级 class.

的名称

如果您将该变量设置为 lazy,它不会从一开始就设置,但会在您设置 myInstance.accesibilityLabel, 时正确设置,从而确保 class 已经可用,因为 self 会被初始化。