Скажем, у меня есть класс, и когда я устанавливаю его свойство, я хочу, чтобы он добавил это свойство с типом файла, например .fileType
:
class File {
var fileName: String {
get {
return self.fileName
}
set {
self.fileName = fileName + ".fileType"
}
}
}
Что я пытаюсь использовать следующим образом:
let newFile = File()
newFile.fileName = "My File"
К сожалению, переменная никогда не устанавливает:
У меня есть два возможных способа обхода.
Вариант 1: соблюдать значение после установки
class File {
var fileName: String = "" {
didSet {
self.fileName += ".fileType"
}
}
}
let file = File()
file.fileName = "SomeName" // SomeName.fileType
Но с этим я должен подождать, пока значение уже будет установлено, прежде чем я смогу его изменить. Для этого конкретного примера это не имеет особого значения; однако, я бы хотел, чтобы избежать этого.
Вариант 2: Подкласс
Это решение основано на примере здесь. Поиск 'speedLimitedCar'
class File {
var fileName = ""
}
class SubFile: File {
override var fileName: String {
get {
return super.fileName
}
set {
super.fileName = newValue + ".fileType"
}
}
}
let subfile = SubFile()
subfile.fileName = "Hello" // Hello.fileType
Вопрос
Я мог бы просто создать вторичное свойство для хранения значения и доступа к нему в getNot/setter файла, но есть ли способ избежать этого и изменить свойство непосредственно в его getter/setter?