Массивы

Массив хранит значения одного и того же типа в упорядоченном списке. То же самое значение может отображаться в массиве несколько раз в разных местах.

Синтаксис массива в сокращенной форме

Полная форма указания типа массива в языке Swift: Array<SomeType>, где SomeType является типом значений, которые могут содержаться в массиве. Вы также можете написать тип массива в сокращенном виде как [SomeType] . Хотя обе формы функционально идентичны, но в сокращенном виде запись, является предпочтительным и используется в этом руководстве при обращении к типу массива.

Создание и инициализация массива

Вы можете создать пустой массив определенного типа, используя синтаксис инициализации:

Следует отметить, что someInts выводится как [Int] от типа инициализатора.

Аналогично, если контекст уже обеспечивает информацию о типе, как аргумент функции или типизированная переменная или константа, то вы можете создать пустой массив с пустым литералом массива, который пишется как [] (пустая пара квадратных скобок).

Тип Array в языке Swift так же имеет свой инициализатор для создания массива определенного размера с присвоением значения по умолчанию всем исходным элементам. Вы передаете инициализатору число элементов, которое должно быть добавленно массиву (count) и значение по умолчанию с подходящим типом (repeatedValue):

Вы можете создать новый массив путем сложения двух существующих массивов с совместимыми типами при помощи оператора сложения ( + ). Тип нового массива выводится из типа двух складываемых массивов:

Литералы массива

Вы можете инициализировать массив литералом массива, что является сокращенной формой для записи одной или нескольких величин в коллекцию массива. Литерал массива записывается в виде списка значений, разделенных запятыми, в окружении пары квадратных скобок:

Пример ниже создает массив с именем shoppingList для хранения String значений:

shoppingList переменная объявлена ​​как «массив строковых значений», записанная, как [String] . Поскольку для этого массива указан тип хранимых значений как String, то только Stringзначения ему и разрешено хранить.. Здесь shoppingList массив инициализируется с двумя Sting значениями ( «Eggs» и «Milk» ), записанных в  литерал массива .

Массив shoppingList объявлен как переменная (с помощью var), а не постоянная (let), потому что в примерах ниже мы будем добавлять значение в этот массив.

В этом случае, литерал массива содержит два String значения и ничего больше. Это соответствует объявленному типу переменной shoppingList, таким образом, присваивание литерала массива разрешен, как способ инициализации shoppingList двумя вписанными элементами.

Благодаря выведению типов Swift, вы не обязаны писать типа массива, если вы инициализируете его литералом, содержащим элементы одного типа. Значит инициализация shoppingList может быть записано вот так:

Поскольку все значения в литерале массива имеют один и тот же тип, Swift может сделать вывод, что [String] правильный тип для переменной shoppingList.

Доступ и изменение массива

Вы можете получать значения и изменять массив через его методы и свойства, или с помощью синтаксиса index.

Чтобы получить количество элементов в массиве воспользуемся read-only свойством count:

Используйте свойство isEmpty типа Bool для быстрой проверки равенства свойства count нулю (0):

Вы можете добавить новый элемент в конец массива путем вызова метода append(_:):

Как альтернатива методу append, вы можете использовать оператор (+=) для добавления нового элемента в конец массива:

Чтобы получить значение из массива, используйте синтаксис index, передавая значения индекса в квадратных скобках сразу после имени массива:

Обратите внимание, что первый элемент в массиве имеет индекс 0 , а не 1 . Массивы в Swift всегда нумеруются с нуля (0).

Вы можете использовать синтаксис index для изменения существующего значения в данном индексе:

Вы также можете использовать синтаксис index для изменения сразу диапазона значений, даже если набор значений имеет разную длину, чем в указанном диапазоне. Следующий пример заменяет «Chocolate Spread» , «Cheese» , и «Butter» на значение «Bananas» и «Apples» :

Вы не можете использовать синтаксис Index, чтобы добавить новый элемент в конец массива.

Для того чтобы вставить элемент на определенную позицию в массиве, нужно использовать метод insert(atIndex:):

Вызов метода insert вставляет новый элемент со значением «Maple Syrup» в самое начало массива, в позицию 0 (потому что atIndex: 0).

Тоже самое происходит и при удалении элементов из массива с помощью метода removeAtIndex. Этот метод удаляет определенный индекс и возвращает значение удаленного элемента (или вы можете игнорировать возвращенную величину, если она вам не нужна).

Если вы попробуете использовать синтаксис index, чтобы получить или назначить новое значение индексу, который находиться за пределами существующего массива, то сработает runtime ошибка. Однако вы всегда можете проверить массив на наличие элементов свойством count и обратиться к нему через синтаксис index (если только count не равно 0). И помните, что наибольший индекс массива всегда (count — 1), так как индексация начинается с нуля (0).

Все пробелы внутри массива закрываются существующимим элементами, то есть происходит сдвиг элементов по индексу. Теперь новый элемент с индексом 0 будет «Six eggs»:

 

Если нужно удалить последний элемент массива, то используйте метод removeLast() вместо removeAtIndex(🙂 для избежания дополнительного вызова свойства count. Как и removeAtIndex(:), метод removeLast() так же возвращает значение удаленного элемента:

Перебор массива

Вы можете перебрать весь набор значений в массиве циклом (for — in):

Если вам нужено знаение каждого элемента массива и его индекс, то необходимо использовать глобальную функию enumerate для итерации по массиву. Функция enumerate возвращает кортеж, состоящий из индекса и значения элемента массива. Вы можете разложить кортеж во временные константы или переменные, как часть итерации:


Просмотренно: 5 718 раз