Ответ 1
Если вы используете set
и get
, тогда свойство должно быть вычислено. Для этого нет реального хранилища.
Этот код определяет var
для хранения данных и вычисленного var
для обработки доступа. Это похоже на то, что у вас было в Objective-C (за исключением того, что в Objective-C вы могли "скрыть" фактическую переменную, сделав ее частной или, совсем недавно, синтезировав ее никогда не упоминаемую в заголовке).
class File {
// this stores the actual data, do not access it directly, consider it private
var theFileName: String = ""
// this is the real interface
var fileName: String {
get {
return self.theFileName
}
set(name) {
self.theFileName = name + ".fileType"
}
}
}
Вы также можете написать set
следующим образом:
set {
self.theFileName = newValue + ".fileType"
}
где newValue
- это имя по умолчанию, если вы опускаете объявление аргумента для set
.
Но то, что вы, вероятно, хотите сделать, это то, что вы уже сделали (и отклонено по неизвестным причинам):
var fileName: String = "" {
didSet {
self.fileName += ".fileType"
}
}
Это правильный путь.
Обратите внимание: "Я должен подождать, пока значение уже будет установлено, прежде чем я смогу его изменить". неправда. Это похоже на то, но компилятор может очень хорошо оптимизировать код (и, вероятно, будет).