Предположим, что существует двумерный массив
var myArray: [[MyClass]]
Поскольку массив является типом значения в Swift, присваивание, подобное
let line = myArray[lineNumber]
, создаст копию вместо ссылки нафактическая строка.
Чтобы изменить строки в массиве (например, вставить / удалить элементы в строке), не копируя элементы и избегая обильного использования индексации (т. е. имея в коде myArray[lineNumber]
много раз), япробный подход в стиле C с указателями.
Назначение
let rowPointer = UnsafePointer(myArray[rowNumber])
не работает ожидаемым образом, ссылаясь на myArray[rowNumber][0]
, а не на целую строку.
Однако,
let rowPointer = UnsafePointer(myArray) + rowNumber
компилируется без ошибок и делает трюк, поэтому таким образом можно получить доступ ко всей строке с помощью rowPointer.pointee
Так как мне также нужно изменить строку, вставив/ добавление элементов, я попробовал изменяемый указатель:
let rowPointer = UnsafeMutablePointer(myArray) + rowNumber
Однако это назначение дает ошибку компиляции:
Невозможно вызвать initializer for type 'UnsafeMutablePointer<_>' with an argument list of type '([[MyClass]])'
Есть ли способ получить доступ кстрока с изменяемым указателем?