Поскольку я знаю, что массив является типом значения в Swift, ссылок нет.
Вторая половина неверна. Тип T
, являющийся типом значения, просто означает, что этот код печатает «1, 2» вместо «2, 2»:
var a = T()
a.someIntProperty = 1
var b = a
b.someIntProperty = 2
print("\(a.someIntProperty), \(b.someIntProperty)")
Тип значения / ссылки подразумевает набор поведений, не так, как тип реализован внутри.
Как вы сказали, чтобы доступ к массиву работал в O (1) время, массив должен содержать указатели на элементы массива, которые все одного размера Это не делает Array
«не значением типа», потому что весь массив все еще копируется, когда вы переназначаете переменные типа [Any]
. Другая, возможно, более убедительная причина заключается в том, что все значение массива все еще сохраняется в arr
. Просто куча указателей на элементы. Если бы Array
действительно был ссылочным типом, arr
сохранял бы один указатель, указывающий на значение массива.