DevPrep

Все темы › Язык Swift

let vs var для структуры — что изменится при мутирующих методах?

Junior PRO

Суть

Структура — 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

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store