Кортежи


Кортежи или Tuples представляют набор значений, которые рассматриваются как один объект. Для создания кортежа используются скобки, внутри которых записываются все элементы кортежа:

1
2
let props = (22, "age")
var userInfo = (true, 34, "Tom")
Здесь два кортежа props и userInfo. Кортеж props содержит число 22 и строку "age", а кортеж userInfo хранит логическое значение true, число 34 и строку "Tom".

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

1
2
let props: (Int, String) = (22, "age")
var userInfo: (Bool, Int, String) = (true, 34, "Tom")
Причем при объявлении типов кортежа его значения должны полностью соответствовать по типу.

Мы можем присвоить значения из кортежа переменным или константам. Например:

1
2
3
var userInfo: (Bool, Int, String) = (true, 34, "Tom")
let(isMarried, age, name) = userInfo
print(name) // "Tom"
Здесь трем константам isMarried, age и name присваиваются значения кортежа. Причем присвоение идет по позиции: константе isMarried присваивается первое значение кортежа, константе age - второе значение и так далее.

Если необходимо игнорировать при присвоении некоторые значения, то для них можно использовать знак подчеркивания _. Например, нам не нужно первое значение кортежа:

1
2
var userInfo: (Bool, Int, String) = (true, 34, "Tom")
let(_, age, name) = userInfo
Вместо присвоения всех значений кортежа переменным мы можем выполнять присвоение по отдельности:

1
2
3
4
var userInfo: (Bool, Int, String) = (true, 34, "Tom")
let age = userInfo.1
let isMarried = userInfo.0
var name = userInfo.2
Нумерация элементов кортежа начинается с нуля, поэтому к первому элементу мы сможем обратиться так: userInfo.0.

Также по отдельности мы можем изменять элементы кортежа, если кортеж определен как переменная:

1
2
3
var userInfo: (Bool, Int, String) = (true, 34, "Tom")
userInfo.2 = "Bob"
var name = userInfo.2 // Bob
Правда, если кортеж определен как константа, изменить его значения мы уже не сможем.

Также при определении кортежа мы можем именовать его отдельные элементы. Например:

1
2
3
var userInfo = (married: true, age: 34, name: "Tom")
let age = userInfo.age
var name = userInfo.name // Tom