Var, установленный на struct, действительно заменяется при изменении?

Счастливых праздников!

Я застрял на с.147 "Основы программирования iOS 10" Нойберга. Он утверждает, что "когда вы явно изменяете экземпляр типа значения, вы фактически заменяете этот экземпляр другим экземпляром".

Вопрос: Если это правда, то почему я не вижу инициализируемый новый экземпляр?

///////////////////// Slight modification from page 147 in Neuberg, 2016 edition
struct Digit {
    var number : Int
    init(_ n:Int) {
        self.number = n
        print("number was set in the initializer to: \(n)")
    }
}
var d : Digit = Digit(123) {
    didSet {   
        print("didSet detected old: \(oldValue.number) to new: \(d.number)")
    }
}
d.number = 42
d.number = 56

Prints--
номер был установлен в инициализаторе: 123
обнаружено изменение в didSet с 123 на 42
обнаружено изменение в didSet с 42 на 56

Но я больше не вижу, "номер был установлен..."

1 ответ

Решение

Замена не значит звонить init снова.

Концептуально это означает, что вы копируете данные, модифицируете (или изменяете) данные (чтобы изменить number) и заменяя исходные данные измененными данными.

Я не читал эту книгу, но считаю, что этот вопрос был поднят, чтобы прояснить различие между ссылочными типами и типами значений. Типы значений передаются путем копирования, ссылочные типы передаются посредством ссылок (то есть с использованием указателей).

Другие вопросы по тегам