Основы Swift / 5.3. Массивы 2 - Получение доступа и изменение


Видео


Получение доступа и модификация массива
Вы можете получить доступ и модифицировать массив с помощью его методов и свойств или с использованием синтаксиса сабскрипта (индексов).

Для выяснения количества элементов в массиве, проверьте свойство count, предназначенное только для чтения (что значит, что Вы не сможете изменить его значения):
@{5.3\1\1}
                    
var shoppingList = ["Спаржа", "Креветки"]
print("Список покупок содержит следующее количество вещей: \(shoppingList.count).")
// Выведет "Список покупок содержит следующее количество вещей: 2."
                    
                
Проверка массива на пустоту
Используйте Булево свойство isEmpty в качестве короткой формы для проверки того, что свойство count равно 0:
@{5.3\1\2}
                    
if shoppingList.isEmpty {
    print("Список покупок пуст.")
} else {
    print("Список покупок не пуст.")
}
//Выведет "Список покупок не пуст."
                    
                
Так как созданный нами список покупок не пуст, то shoppingList.isEmpty есть ложь, а значит будет выведено соответствующее сообщение.
Добавление новых элементов в массив
Вы можете добавить новый элемент в конец массива, вызвав метод массива append(_:):
@{5.3\1\3}
                    
shoppingList.append("Рис")
// shoppingList теперь содержит 3 элемента, а кто-то готовит что-то восточное
                    
                
Или с помощью оператора сложения/присваивания
С другой стороны, Вы можете добавить один или больше совместимый элемент с помощью оператора сложения/присваивания (+=):
@{5.3\1\4}
                    
shoppingList += ["Васаби"]
// shoppingList теперь содержит 4 элемента
shoppingList += ["Имбирь", "Соевый соус", "Сыр"]
// shoppingList теперь содержит 7 элементов
                    
                
Получение значения из массива
Получить элемент из массива можно, используя сабскрипт-синтаксис с помощью индекса значения, которое Вы хотите извлечь, записав его в квадратных скобках сразу после имени массива.

Первый элемент в массиве имеет индекс 0, а не 1. Все массивы в Swift пронумерованы с нуля.
@{5.3\1\5}
                    
var firstItem = shoppingList[0]
// firstItem теперь равен "Спаржа"
                    
                
Изменение значения элемента массива
Вы можете использовать синтаксис сабскриптов для изменения существующего значения по заданному индексу:
@{5.3\1\6}
                    
shoppingList[0] = "6 пакетов спаржи"
// первый элемент списка теперь равен "6 пакетов спаржи", а не "Спаржа"
                    
                
Чуть подробнее про синтаксис сабскриптов
Когда Вы будете использовать синтаксис сабскриптов, индекс, который Вы указываете, должен быть корректным.

Например, написав shoppingList[shoppingList.count] = "Лосось" для добавления элемента в конец массива, Вы получите ошибку времени выполнения.

Вы также можете использовать синтаксис сабскриптов для изменения промежутка элементов одновременно, даже если заменяющий набор значений имеет длину, отличную от интервала, Вами заменяемого. Следующий пример демонстрирует замену "Имбирь", "Соевый соус" и "Сыр" на "Лосось" и "Тунец":
@{5.3\1\8}
                    
shoppingList[4...6] = ["Лосось", "Тунец"]
                    
                
Метод insert
Вызов метода insert(_:at:) вставляет новый элемент со значением "Соевый соус" в самое начало списка покупок, имеющее индекс 0.
@{5.3\1\8}
                    
shoppingList.insert("Соевый соус", at: 0)
// shoppingList теперь содержит 7 элементов
// "Соевый соус" теперь первый элемент в списке
                    
                
Удаление элемента из массива
Аналогично, Вы можете удалить элемент из массива с помощью метода remove(at:). Этот метод удаляет элемент с определённой позиции и возвращает удалённое значение (хотя Вы и можете проигнорировать вернувшееся значение, если Вам не нужно использовать его):
@{5.3\1\9}
                    
let deletedSauce = shoppingList.remove(at: 0)
// элемент, который был на индексе 0, только что был удалён
// shoppingList теперь содержит 6 элементов, но не включает "Соевый соус"
// константа deletedSauce теперь равна удалённой строке "Соевый соус"
                    
                
Ошибки индексов массивов
Если Вы попытаетесь получить доступ или изменить значение на индексе, который находится за границами массива, то Вы получите ошибку времени выполнения. Вы можете проверить индекс на корректность перед его использованием, сравнив его со свойством count массива. Наибольший индекс массива имеет индекс count-1, так как массив индексируется с 0, однако, когда count равен 0 (означает, что массив пуст), нет корректных индексов в принципе.

Любые пропуски в массиве закрываются, когда элемент удаляется, так что элемент на индексе 0 снова равен "6 пакетов спаржи":
@{5.3\1\10}
                    
firstItem = shoppingList[0]
// firstItem снова равен "6 пакетов спаржи"
                    
                
Удаление последнего элемента массива
Если Вы хотите убрать последний элемент из массива, то Вы можете использовать метод removeLast() вместо метода remove(at:), дабы избежать необходимости запрашивать свойство count массива. Как и метод remove(at:), метод removeLast() возвращает удалённое значение:
@{5.3\1\11}
                    
let tuna = shoppingList.removeLast()
// последний элемент в массиве был только что удалён
// shoppingList теперь содержит 5 элементов, но без "Тунец"
// константа tuna теперь равна удалённой строке "Тунец"
                    
                
Итерирование массива
Вы можете перебрать через набор значений в массиве с помощью цикла for-in:
@{5.3\1\12}
                    
for item in shoppingList {
    print(item)
}
                    
                
Как можно заметить, этот цикл выведет значения всех элементов массива в столбик.
Итерирование массива через ключ-значение
Если Вам нужен целочисленный индекс для каждого элемента, ровно как и его значение. используйте метод enumerated() для итерирования через массив. Для каждого элемента в массиве метод enumerated() возвращает кортеж из этого целого и элемента. Эти целые числа отсчитываются с нуля и включают каждую вещь; если Вы перебираете весь массив, то эти целые числа совпадают с индексами элементов. Вы можете декомпозировать кортеж во временные константы или переменные при этом:
@{5.3\1\13}
                    
for (index, value) in shoppingList.enumerated() {
    print("Вещь \(index+1): \(value)")
}
                    
                
Итер
Итерирование - это пошаговое прохождение через какой-либо процесс. В данной главе итерирование - это перебор элементов массива.
Шаг итерирования называется итерацией.
Сущность, используемая для итерирования, называется итератором. В Swift итераторы скрыты во внутренней реализации коллекций.
Пошаговый процесс также можно назвать итеративным процессом.
Объект, над которым можно совершить процесс итерирования, называется итерабельным.
"Just be warring, kids!"
Не используйте список ингредиентов выше для создания блюда в реальном мире. Мы не несём никакой ответственности за совместимость ингредиентов. Приняв наше лицензионное соглашение, Вы уже согласились с тем, что нельзя верить ничему здесь сказанному и все совпадения случайны.