Обновление Быстрые массивы слишком странные. Я думаю, что более надежно использовать NSMutableArray
s, если это необходимо.Быстрое создание ссылки на изменяемый массив
Я понимаю, что Swift обычно проходит массив по значению, а не по ссылке, но мне нужно, чтобы иметь возможность передать ссылку в коде так:
var arr1 = [1, 2, 4]
var arr2 = [4, 6, 3]
var result = pickOne() ? arr1 : arr2
result[2] = 7
// one of these should be updated, currently they are just as initialized
println(arr1)
println(arr2)
Я хочу, чтобы динамически выбирать один из двух массивов , и внести изменения в этот массив. Оба массива имеют одинаковый размер и тип контента, и я бы только менял элементы, а не добавлял или удалял. Как я могу это достичь?
Редактировать: Является ли ответ только для использования NSMutableArray
?
Просто уточнить: pickOne()
- это функция, которую у меня уже есть, и на основе результатов этой функции я хочу изменить первый или второй массив. Поэтому мне не нужна помощь в выборе того, что выбрать. Мне нужна помощь в определении того, как внести изменения (и их будет несколько) в этот желаемый массив без необходимости проверять, какой массив использовать для каждой модификации.
я мог бы сделать что-то вроде этого:
if pickOne() {
// work on arr1
// ...
} else {
// work on arr2
// ...
}
// do some other work
// ...
if pickOne() {
// work more on arr1
// ...
} else {
// work more on arr2
// ...
}
// do yet another set of things
// ...
if pickOne() {
// work again on arr1
// ...
} else {
// work again on arr2
// ...
}
Но это надоедает быстро.
Редактировать До сих пор я достиг некоторого прогресса здесь
var result = pickOne() ? UnsafeMutableBufferPointer(start: &arr1, count: arr1.count) : UnsafeMutableBufferPointer(start: &arr2, count: arr2.count)
Я не забочусь слишком много, что ссылка является бесхозной, так как массивы фактически прочно удерживаются свойства личности, так не должно действительно выпускаются неожиданно, но использование наверняка выглядит уродливым. Очень неприятно, что вам нужно вызвать функции с пугающими именами Unsafe
, пытаясь сделать что-то настолько примитивное.
Вы действительно спрашиваете, как передать массив по ссылке, чтобы его можно было изменить (так как уже есть много прошлых вопросов и справочных материалов по легко доступным данным) или как динамически выбрать, какой из них пройти? – Gruntcakes
Как пройти по ссылке. Все примеры, которые я видел, полагаются на ключевое слово 'inout' и используют дополнительные функции, которые становятся довольно громоздкими, и до сих пор мне не повезло, что он действительно работал для этого варианта использования. – SaltyNuts
Похож, что 'UnsafeMutableBufferPointer' делает трюк, но черт возьми, это уродливо. – SaltyNuts