Swift Array дополнительно Тип и подписка (бета-версия 3)

Я слежу за учебником WWW 2014 года 408: Swift Playgrounds с использованием XCode Beta 3 (30 минут). Синтаксис Swift изменился со времен Бета 2.

var data = [27, 46, 96, 79, 56, 85, 45, 34, 2, 57, 29, 66, 99, 65, 66, 40, 40, 58, 87, 64] func exchange(data: [T], i: Int, j: Int) { let temp = data[i] data[i] = data[j] // Fails with error '@lvalue $T8' is not identical to 'T' data[j] = temp // Fails with error '@lvalue $T5' is not identical to 'T' } exchange(data, 0 , 2) data 

Почему я не могу изменить изменяемый массив целых чисел таким образом?

Потому что параметры подпрограммы неявно определены, поэтому let не изменяются. Попробуйте изменить объявление:

 func exchange(inout data: [T], i: Int, j: Int) { 

и призыв к:

 exchange(&date, 0, 2) 

Вы также можете использовать var но это позволит только модифицировать массив в рамках подпрограммы. Большое изменение для бета-3 состояло в том, чтобы сделать массивы действительно передаваемыми по значению, а не просто как бы сортировать пропуск по значению некоторое время, но не все остальное.

@David ответ правильный, позвольте мне объяснить, почему: массивы (а также словари и строки) являются типами значений (structs), а не ссылочными типами. Когда тип значения должен быть передан функции, создается его копия, и функция работает над этой копией.

Используя inout модификатор, вместо этого передается исходный массив, поэтому в этом случае можно внести изменения.

  • Байт-массив для преобразования изображений
  • Как скопировать файл .txt в массив символов в c ++
  • Почему элементы массива отформатированы как нули, когда они умножаются на 1/2 или 1/3?
  • Доступ к массиву доступа за пределами C и C ++
  • Сортировка объектов в массиве по дате
  • C ++ int в байтовый массив
  • Как получить уникальные значения из массива
  • Многомерный массив vs
  • Как объявить двухмерный массив типа string в Objective-C?
  • Как GCC реализует массивы переменной длины?
  • Есть ли что-нибудь вроде deal () для обычных массивов MATLAB?
  • Давайте будем гением компьютера.