Передаются ли swift-классы внутри структуры копией во время назначения?

Если у меня есть структура в swift с атрибутом класса, и я копирую объект struct, является ли атрибут класса скопированным или переданным по ссылке?

2 ответов


прошел по ссылке. Можете проверить. Объявить:

class A{}
struct B { let a = A()}

затем:

let b = B()
print("A = \(unsafeAddressOf(b.a))")//0x0000600000019450
let b_copy = b
print("A = \(unsafeAddressOf(b_copy.a))")//0x0000600000019450

все свойства структуры копируются (как если бы вы назначили (=) каждое свойство старой структуры к соответствующему свойству новой структуры) при копировании структуры, независимо от типа.

когда вы говорите "атрибут класса", я предполагаю, что вы имеете в виду переменную ссылочного типа. (Тип с тем же именем, что и класс определяет ссылочный тип для ссылки на объекты этого класса.) Копирование значения ссылочного типа (ссылка) производит другую ссылку, которая указывает на тот же объект. Обратите внимание, что" объекты "не являются значениями в Swift-нет" типов объектов " - скорее, объекты всегда манипулируются ссылками, которые указывают на них.