Ответ 1
Как вы говорите, вы не можете просто переопределить константу в подклассе (в конце концов, это константа). Ошибка, которую вы получаете, это "Невозможно переопределить хранимое свойство". Кажется, возможно переопределить var
, однако, когда я изменяю let someVariable
на var someVariable
, я получаю "неоднозначное использование" someVariable "при доступе к нему в подклассе (примечание - то же самое происходит, Я использую override
или нет).
Самое простое решение - использовать геттер. Это действительно функция, поэтому вы можете с радостью переопределить ее, для вас будет управляться переменная поддержки, а если вы не предоставите сеттер... она будет постоянной для каждого класса:
class BaseView: UIView {
var someVariable: Int { get { return 1 } }
// do some work with someVariable
}
class ExtendedView: BaseView {
override var someVariable: Int { get { return 2 } }
}
let a = BaseView()
a.someVariable // 1
let b = ExtendedView()
b.someVariable // 2
Как отмечает комментатор @user3633673, если у вас есть только геттер (а не сеттер), вы можете отказаться от get
, но я оставил его для ясности принципа. Здесь же без него...
class BaseView: UIView {
var someVariable: Int { return 1 }
// do some work with someVariable
}
class ExtendedView: BaseView {
override var someVariable: Int { return 2 }
}
let a = BaseView()
a.someVariable // 1
let b = ExtendedView()
b.someVariable // 2