Основы Swift / 5.2. Массивы 1 - основы


Видео


Массивы
Массив хранит значения одинакового типа в виде сортированного списка. Одно и то же значение может присутствовать в массиве множество раз на разных позициях.
Array и NSArray
Тип Array из Swift обладает свойством взаимозаменяемости с классом NSArray из Foundation.

Если Вы знакомы с C++ или Java, то Array в Swift является намного более мощным классом и скорее схож с векторами в указанных языках: он сам регулирует свой размер, имеет простые методы для добавления элементов и позволяет создавать свой динамический вариант в многомерном виде.
Краткий синтаксис массивов
Полностью тип массива в Swift записывается как Array<Element>, где Element - это тип значений, которые разрешено хранить массиву. Вы также же можете написать тип массива в сокращённой форме в качестве [Element]. И хотя обе формы функционально идентичны, но сокращённая форма предпочтительнее и используется в течение этого руководства при описании массивов.

Вы можете создать пустой массива определённого типа, используя синтаксис инициализатора:
@{5.2\1}
                    
var someInts = [Int]()
print("someInts имеет тип [Int].")
// Выведет "someInts имеет тип [Int]."
                    
                
Вывод типа массива
Заметьте, что тип переменной someInts выведен в [Int] из типа его конструктора.

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

Вероятно новым для Вас станет странная строчка someInts.append(3). Не стоит пугаться: массивы в Swift являются типом, а потому имеют свои свойства и методы, что будет описано в дальнейших главах. Здесь же скажем, что метод - это функция, вызываемая на объекте. Записывается это через точечную нотацию - сперва пишется имя сущности, на которой происходит вызов, затем точка, а в конце концов имя метода. Это верно и для свойств - связанных с объектом величин.
@{5.2\2}
                    
var someInts = [Int]()
someInts.append(3)
// someInts теперь содержит значение 3 типа Int
someInts = []
// someInts теперь пустой массив, но всё ещё остаётся типом [Int]
                    
                
Создание массива со значением по-умолчанию
Тип Array в Swift также предоставляет конструктор для создания массива указанного размера, все элементы которого заданы в одно и то же значение по-умолчанию. Вы передаёте в этот конструктор значение по-умолчанию подходящего типа (называемое repeating): и число раз, сколько данное значение будет повторено(называемое count):
@{5.2\3}
                    
var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles имеет тип [Double] и равен [0.0, 0.0, 0.0]
                    
                
Создание массива сложением двух массивов воедино
Вы можете создать новый массив, сложив вместе два существующих массива с совместимыми типами с помощью оператора (+). Тип нового массива будет выведен из типа складываемых массивов:
@{5.2\4}
                    
var threeDoubles = Array(repeating: 0.0, count: 3)
var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles имеет тип [Double] и равен [2.5, 2.5, 2.5]

var sixDpubles = threeDoubles + anotherThreeDoubles
// sixDpubles выведен как [Double] и равен [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
                    
                
Создание массива с помощью литерала массива
Вы также можете инициализировать массив с помощью литерала массива, который является сокращённой формой записи одного или нескольких значений в качестве коллекции-массива. Литерал массива записывается как список значений, разделанных запятыми, окружёнными парой квадратных скобок:
@{5.2\5}
                    
var shoppingList: [String] = ["Спаржа", "Креветки"]
// shoppingList был создан с двумя изначальными значениями
                    
                
Переменная shoppingList объявлена как "массив строковых значений" и записывается как [String]. Так как этот конкретный массив был явно задан типом String, то ему разрешено хранить только элементы типа String. Здесь массив shoppingList инициализирован двумя строками ("Спаржа" и "Креветки") и записан с помощью литерала массива.

Массив shoppingList объявлен в качестве переменной, а не константы, так как больше элементов может быть добавлено в лист покупок в примерах ниже.

В этом случае литерал массива содержит два значения типа String и ничего больше. Это совпадает с типом объявления переменной shoppingList (массив, который может содержать только элементы типа String), так что присваивание массива-литерала разрешено как способ инициализации shoppingList двумя изначальными элементами.
Типовыведение для массивов
Благодаря типовыведению Swift Вам не нужно писать тип массива, если Вы задаёте его с помощью литерала массива, содержащего элементы одного типа. Инициализация shoppingList может быть записана в сокращённой форме вместо обычного синтаксиса:
@{5.2\6}
                    
var shoppingList = ["Спаржа", "Креветки"]
                    
                
Так как все значения в литерале массива одного типа, то Swift может вывести, что [String] - это корректный тип для использования в переменной shoppingList.