代码之家  ›  专栏  ›  技术社区  ›  mfaani

获取错误的默认值

  •  0
  • mfaani  · 技术社区  · 6 年前

    我编写了一个自定义TableViewCell类,该类返回 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 ?? ""
            }
        }
    }
    

    如果我设置 可接近性标签 但是,如果未设置该值,则它们返回的默认值将不同。

    例如I子类 UserNameTableViewCell 离开我 BaseTableViewCell 类和 不要 设置 可接近性标签 那时我自己:

    • 正确的版本返回 可接近性标签 作为 用户名TableViewCell .
    • 不正确的版本返回 可接近性标签 作为回报 “(baseTableViewCell)->()->baseTableViewCell”

    为什么会这样?!

    1 回复  |  直到 6 年前
        1
  •  1
  •   regina_fallangi BigFab    6 年前

    self 在代码的第二个版本中调用它时尚未初始化,这就是为什么它会显示超级类的名称。

    如果您将该变量设置为 lazy ,它不会从头开始设置,但将在您设置时设置正确。 myInstance.accesibilityLabel, 因此,确保类的名称已经可用,因为 自己 会被初始化的。