Получение неверного значения по умолчанию - PullRequest
0 голосов
/ 12 июня 2018

Я написал собственный класс 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 от моего BaseTableViewCellclass и не сами установите accessibilityLabel, тогда:

  • Правильная версия возвращает accessibilityLabel как UserNameTableViewCell .
  • Неправильная версия возвращает accessibilityLabel, поскольку возвращает "(BaseTableViewCell) -> () -> BaseTableViewCell"

Почему это так?!

1 Ответ

0 голосов
/ 12 июня 2018

self не инициализируется к тому времени, когда вы вызываете его во второй версии кода, поэтому он показывает имя суперкласса.

Если вы установите эту переменную как lazy, он не будет установлен с самого начала, но будет установлен правильно, когда вы выполните myInstance.accesibilityLabel,, таким образом, убедившись, что имя класса уже доступно, поскольку self было бы инициализировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...