Переопределение свойства Swift {get set} на свойство {get} only.Делая переменную постоянной - PullRequest
0 голосов
/ 21 сентября 2019

Возможно ли переопределить переменную на константу?По сути, это лучшее, что я могу придумать:

class TextStyle: UITextLabel {
    private let _textStyle: FontStyle
    override public var textStyle: FontStyle {
        get { return _textStyle }
        set {
            #warning ("you cant set")
            if newValue != _textStyle {
                self.textStyle = _textStyle
            }
        }
    }

    init(frame: CGRect, textStyle: FontStyle) {
        self._textStyle = textStyle
        super.init(frame: frame)
    }

    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Если невозможно переопределить переменную на константу, я хочу, чтобы пользователь уведомлялся во время компиляции, что он не может установить недвижимость.#warning не работает, это лучшее, что я могу придумать.Я считаю, что для этого есть возможность использовать протоколы, что является более сложным.Похож на кодируемый, кодируемый и декодируемый.

1 Ответ

0 голосов
/ 21 сентября 2019

Вы не можете переопределить устанавливаемое свойство, чтобы оно было неустановимым, и вы ничего не можете сделать с установкой устанавливаемой переменной во время компиляции.Единственное, что вы можете сделать, это предотвратить это во время выполнения.Например, вы можете заменить

#warning ("you cant set")

на

fatalError("you can't set")

(но будьте осторожны, чтобы не нарушить функциональность суперкласса.)

...