Кортежи (tuples)
Кортежи (tuples) группируют несколько значений в одно составное значение. Это значение внутри кортежа может иметь любой тип и значениям не обязательно всем быть одного типа.
В следующем примере, (404, «Not found») — это кортеж, который описывает код ответа HTTP. Код ответа HTTP — это специальное значение, которое веб-сервер возвращает вам каждый раз, когда вы запрашиваете веб-страницу. Код 404 Not found значит, что запрашиваемая страница не найдена.
1 2 |
let http404Error = (404, "Not found") // http404Error имеет тип (Int, String) и равен (404, "Not found") |
Кортеж (404, «Not found») группирует Int и String для того, чтобы вернуть код ответа HTTP, состоящего из двух частей — номера и понятного человеку описания. Мы можем описать этот тип как «кортеж типа (Int, String)».
Вы можете создавать кортежи из любой перестановки типов и они могут содержать сколько угодно нужных вам типов. Можно создать кортежи (Int, Int, Int) или (String, Bool), в общем — любой, какой вам нужно.
Вы можете разобрать (или декомпозировать, или разложить — decompose) компоненты кортежа в отдельные константы или переменные, чтобы использовать их:
1 2 3 4 5 |
let (statusCode, statusMessage) = http404Error println("Код статуса \(statusCode)") // печатает "Код статуса 404" println("Сообщение - \(statusMessage)") // печатает "Сообщене - Not found" |
Если вам нужны лишь некоторые из значений кортежа, можно игнорировать его части, используя подчеркивание (_) при разложении кортежа:
1 2 3 |
let (justTheStatusCode, _) = http404Error println("Код статуса \(justTheStatusCode)") // печатает "Код статуса 404" |
Другой возможный вариант — доступ по индексу элемента, начиная от 0:
1 2 3 4 |
println("Код статуса \(http404Error.0)") // печатает "Код статуса 404" println("Сообщение - \(http404Error.1)") // печатает "Сообщене - Not found" |
Можно также дать индивидуальные имена элементам в кортеже при его объявлении:
1 |
let http200Status = (statusCode: 200, description: "OK") |
Если вы дали имена элементам в кортеже, вы можете использовать их, чтобы обращаться к этим элементам:
1 2 3 4 |
println("Код статуса \(http200Status.statusCode)") // печатает "Код статуса 200" println("Сообщение - \(hhttp200Status.description)") // печатает "Сообщене - OK" |
Кортежи особенно полезны, когда мы возвращаем значение из функций. ФФункция, которая скачивает веб страницу, может возвращать кортеж (Int, String) для обозначение успешности или неудачи совершенной операции. Возвращая кортеж с двумя значениями, каждое разного типа, функция предоставляет больше полезной информации о ее выполнении, чем если бы она возвращала какое-то одно значение. Для большей информации по теме, смотрите раздел «Функции с несколькими возвращемыми значениями» на нашем сайте.
Кортежи полезны для временных групп схожих значений. Они не предназначены для создания сложных структур данных. Если есть шанс, что ваши данные будут храниться в приложении некоторое время, лучше смоделировать их с помощью класса или структуры. Для большей информации на эту тему, почитайте раздел «Классы и структуры».