Возможно, вы никогда не встречались в программировании с таким понятием, как кортежи, тем не менее, это одно из очень полезных функциональных средств, доступных в Swift. Кортежи, к примеру, могут использоваться для работы с координатами. Согласитесь, куда удобнее орудовать конструкцией (x, y, z), записанной в одну переменную, чем создавать по отдельной переменной для каждой оси координат.
Кортежи (Tuples) – очень важный и порой просто незаменимый элемент Swift, которого очень не хватает в некоторых других языках. Уделите должное внимание его изучению и тренировке работы с ним.
Какие из приведенных переменных являются кортежем?
var tupleOne = (200) var tupleTwo = (200, 201) var tupleThree: (Int, Int) = (1, 100)
tupleOne
– переменная типа InttupleTwo
и tupleThree
– кортежи, они группируют несколько значений в одноОпределите тип данных для каждого кортежа.
var tupleOne = (1, 2, 3.14) var tupleTwo = (5, 16.0, 4.11) var tupleThree = (9, "Age") var tupleFour = (tupleThree.1, "9") var tupleFive = ("Century", 21)
tupleOne
– тип (Int, Int, Double)
tupleTwo
– тип (Int, Double, Double)
tupleThree
– тип (Int, String)
tupleFour
– тип (String, String)
tupleFive
– тип (String, Int)
Какие из кортежей из задания 2 могут быть проинициализированы друг другу (т.е. значение одного присвоено другому)?
Никакие, т.к. у всех из них различный тип данных.
Что будет выведено на консоль?
var tupleAddress = ("Vologda", "Russia", "Earth") tupleAddress.3 = "Mars" var (city, country, planet) = tupleAddress print(planet)
На консоль будет выведена ошибка, т.к. третий элемент кортежа имеет индекс 2, а в коде выше идет попытка обращения к несуществующему четвертому элементу с индексом 3.
Что будет выведено на консоль?
var tupleAboutMe = ("Mike", 37) var (name, age) = tupleAboutMe tupleAboutMe.0 = "Eridar" print(name)
На консоль будет выведено Mike
.
Значение в переменной не изменится при его изменении в кортеже, от куда оно было получено. Это связано с тем, что кортеж оперирует значимыми типами (value type), которые передаются не по ссылке, а непосредственно самим значением.
let name = "Alex" var age:UInt8 = 16 var tuple: (name: String, age: Int) tuple.name = name tuple.age = Int(age)
6 Comments
Подскажите, задание 6, есть ли разница между моим выполнением и эталонным, как я понимаю в любом случае значения были записаны, хоть и на этапе создания кортежа:
import Foundation
let name = “Andrey”
var age:UInt8 = 32
var about:(name:String, age:Int) = (name, Int(age))
В общем вопрос, есть ли разница и засчитывается подобное?
В 11 задании вместо буферного кортежа сделал обмен в одну строку таким образом:
(tuple, tuple2) = (tuple2, tuple)
Код работает… Выходит можно создавать кортеж в кортеже?
Так же про 11ое задание:
//мой кортеж
var exp11 = (myMovi:”Show”,myCount:7)
//пишем в константы
let (a,b) = (exp11.0,exp11.1)
//выводим в консоль
print(“\(a) \(b)”)
//задаем тип Man
typealias Man = (String,Int)
//задаем кортеж другого человека
var exp11A: Man = (hisMovi:”HisShow”,hisNum:14)
//обмен
(exp11,exp11A) = (exp11A,exp11)
/* после обмена именование параметров второго кортежа Exp11A удалилось, но значения
но значения поменялись местами */
это верно?
mr.lyubimov:Нифига не правильно))) К сожалению я сделал как и Вы… и оборжался потом над собой, типа какой я прогер классный, запомнил про смену переменных без буфера АХАХАХАХ В задании не просто так подсказка про буфер была, а так же штука в том чтобы элементы первого и второго картежа друг от друга минусовать. А в Вашем и моем случае мы минусуем не те данные что указаны в задании… Смешно и круто получилось! И точно запоминается такое!
🤦♂️
Вопрос либо к заданию, либо к формулировке в книге.
“Кортеж – это объект, который группирует значения различных типов в пределах одного составного значения .”.
Но tupleTwo и tupleThree группируют один тип данных- Int. Пускай их и по два в каждом.
То есть формулировка дб :
” группируют несколько значений в одно, обычно группирует различные типы”