首页 > 解决方案 > 获取错误的默认值

问题描述

我写了一个自定义的 TableViewCell 类,它要么返回accessibilityLabel设置在它上面的,要么只返回它的类名作为accessibilityLabel. 尽管以下两种实现之一不能按预期工作。我试图理解为什么...

返回正确的类名

class BaseTableViewCell: UITableViewCell {
    var _acsLabel: String?

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

返回错误的类名

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

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

如果我设置了 ,两个版本都会正确返回值accessibilityLabel,但是如果未设置值,则它们返回的默认值是不同的。

例如,我UserNameTableViewCell从我的BaseTableViewCell班级中继承,然后设置accessibilityLabel自己:

这是为什么?!

标签: swiftinitializationdefault-valuegetter-setter

解决方案


self在第二版代码中调用它时没有初始化,这就是它显示超类名称的原因。

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


推荐阅读