История изменений
Исправление eao197, (текущая версия) :
Я ничего не знаю про swift,
Но мнение имеете? Иначе как объяснить вашу попытку что-то рассказать про Swift?
но попробовал бы добавить слово `mutating` перед функцией `increment`
Во-первых, метод класса, не помеченный как mutating, меняет значение объекта, задекларированного через let. Здравый смысл подсказывает, что такого быть не должно.
Во-вторых, использовать mutating можно либо в struct, либо в enum. Вот так уже будет ошибка компиляции:
struct Counter {
var count = 0
mutating func increment() {
self.count += 1
}
mutating func increment(by amount: Int) {
self.count += amount
}
mutating func reset() {
self.count = 0
}
func current() -> Int {
return self.count;
}
}
let c = Counter();
print("c: ", c.current());
// c.increment();
print("c: ", c.current());
Но вопрос про иммутабельность экземпляра класса остается.
Тогда как в D этого вопроса нет в принципе, вне зависимости от использования struct/class (емнип).
Исходная версия eao197, :
Я ничего не знаю про swift,
Но мнение имеете? Иначе как объяснить вашу попытку что-то рассказать про Swift?
но попробовал бы добавить слово `mutating` перед функцией `increment`
Во-первых, метод класса, не помеченный как mutating, меняет значение объекта, задекларированного через let. Здравый смысл подсказывает, что такого быть не должно.
Во-вторых, использовать mutating можно либо в struct, либо в enum. Вот так уже будет ошибка компиляции:
struct Counter {
var count = 0
mutating func increment() {
self.count += 1
}
mutating func increment(by amount: Int) {
self.count += amount
}
mutating func reset() {
self.count = 0
}
func current() -> Int {
return self.count;
}
}
let c = Counter();
print("c: ", c.current());
// c.increment();
print("c: ", c.current());[/swift]
Но вопрос про иммутабельность экземпляра класса остается.
Тогда как в D этого вопроса нет в принципе, вне зависимости от использования struct/class (емнип).