let vs var для структуры — что изменится при мутирующих методах?
Суть
Структура — value-тип, и константность let относится ко всему значению: нельзя присвоить новое значение, нельзя изменить ни одно свойство (даже var), нельзя вызвать mutating-метод. mutating означает, что метод может менять self — вплоть до полной замены self = Counter(), — поэтому на let он запрещён компилятором.
struct Counter {
var value = 0
mutating func increment() { value += 1 }
}
let fixed = Counter()
// fixed.value = 1 // error: 'fixed' is a 'let' constant
// fixed.increment() // error: cannot use mutating member on immutable value
var counter = Counter()
counter.increment() // ok
final class Box { var value = 0 }
let box = Box()
box.value = 1 // ok: константна ссылка, не объект
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep