Возможно, вы никогда не встречались в программировании с таким понятием, как кортежи, тем не менее, это одно из очень полезных функциональных средств, доступных в 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)
9 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. Пускай их и по два в каждом.
То есть формулировка дб :
» группируют несколько значений в одно, обычно группирует различные типы»
var tupl3: (String, Int) = (movie: «Unforgiven», number: 38)
let (con1, con2) = tupl3
print(con1, con2)
typealias Man = (String, Int)
var tupl4: Man = (movie: «Thing», number: 2)
var tupl5 = tupl3
tupl3 = tupl4; tupl4 = tupl5
print(tupl3, tupl4)
var tuple6 = (tupl3.number, tupl4.number, tupl3.number — tupl4.number)
На последнюю строчку Xcode ругается: Value of tuple type ‘(String, Int)’ has no member ‘number’
Не могу понять, почему…
var tupl3: (movie:String, number:Int) = («Unforgiven», 38)
let (con1, con2) = tupl3
print(con1, con2)
//typealias Man = (String, Int)
var tupl4: (movie:String, number:Int) = («Thing», 2)
var tupl5 = tupl3
tupl3 = tupl4; tupl4 = tupl5
print(tupl3, tupl4)
var tuple6 = (tupl3.number, tupl4.number, tupl3.number — tupl4.number)
print(tuple6)
исправил…
typealias Man = (movie:String, number:Int)
var tupl4:Man = («Thing», 2)