Swift вычислил свойства в Swift с переменной экземпляра?

Я пытаюсь создать вычисляемое свойство в Swift, и мне нужна переменная экземпляра, чтобы сохранить состояние свойства.

Это особенно происходит, когда я пытаюсь переопределить свойство в моем суперклассе:

class Jedi {
    var lightSaberColor = "Blue"
}


class Sith: Jedi {
    var _color = "Red"
    override var lightSaberColor : String{
        get{
            return _color
        }
        set{
            _color = newValue
        }
    }

}

Я переопределяю хранимое свойство lightSaberColor в Jedi с помощью вычисляемого свойства, потому что это единственный способ, которым компилятор может мне это позволить. Это также заставляет меня создавать геттер и сеттер (что имеет смысл). И вот тогда я сталкиваюсь с неприятностями.

Пока что единственный способ, который я нашел, - определить этот дополнительный и ужасный _color, Тебе более элегантное решение?

Я пытался определить _color внутри блока свойств, но он не скомпилируется.

Должен быть лучший способ!

2 ответа

Решение

То, как у вас это есть, это единственный способ, которым он может работать прямо сейчас - единственное изменение, которое я хотел бы сделать, это объявить _color как private,

В зависимости от ваших потребностей, может быть достаточно иметь сохраненное свойство с willGet и / или didSet обработчики.

Почему бы просто не установить его в инициализаторе?

class Jedi {
    var lightSaberColor = "Blue"
}

class Sith: Jedi {
    override init () {
        super.init()
        self.lightSaberColor = "Red"
    }
}
Другие вопросы по тегам