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
) и заменяя исходные данные измененными данными.
Я не читал эту книгу, но считаю, что этот вопрос был поднят, чтобы прояснить различие между ссылочными типами и типами значений. Типы значений передаются путем копирования, ссылочные типы передаются посредством ссылок (то есть с использованием указателей).