获取错误的默认值

时间:2018-06-12 18:30:18

标签: swift initialization default-value getter-setter

我写了一个自定义的TableViewCell类,它返回在其上设置的accessibilityLabel,或者只返回它的类名accessibilityLabel。虽然下面两个实现中的一个不能按预期工作。我想知道为什么......

返回正确 className

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

  • 正确的版本会将accessibilityLabel作为 UserNameTableViewCell 返回。
  • 错误的版本会返回accessibilityLabel作为返回“(BaseTableViewCell) - >() - > BaseTableViewCell”

为什么?!

1 个答案:

答案 0 :(得分:1)

在第二版代码中调用它时,

self未初始化,这就是它显示超类名称的原因。

如果将该变量设置为lazy,则不会从头开始设置,但会在执行myInstance.accesibilityLabel,时设置,从而确保类的名称已经可用,因为{ {1}}本来是初始化的。