Продвигаясь по книге и курсу вы неизбежно будете все лучше и лучше узнавать новый для вас язык программирования. С каждой главой количество и сложность материала будут расти, но вместе с ними будут увеличиваться и интерес к разработке, а так же ваша рыночная стоимость =) Именно по этой причине в дальнейшем будут преобладать практические задания.
Вы уже знаете, что такое типы данных и какие операции могут быть проведены со значениями различных типов. В будущем для вас будет еще много удивительных открытий, так вы научитесь создавать свои собственные типы, но сейчас продолжим изучать эту довольно простую, но интересную тему.
Одним из способов определения типа данных переменной или константы является указание имени конкретного типа через двоеточие после имени параметра, например var thisIsMyVar: String = ""
.
Как называется такой вид определения типа данных?
Каким еще способом, помимо явного определения типа, можно указать тип данных для объявляемого параметра? Приведите пример.
Другим способом является — неявный, когда тип определяется по проинициализированному значению.
Например, var whatIsIt = "Краб"
. В этом случае переменная whatIsIt
будет иметь тип данных String
.
Укажите, какие из строк кода будут успешно выполнены, не вызвав ошибок:
Var myVar = 132 let myName = "Angel" var myGrilfriend var countOfMyDogs = 4.96 let name of city = "Cherepovets" let country = Russia var age: UInt8 = 5.5
var
указано с большой буквы.Укажите, какие из строк кода будут успешно выполнены, не вызвав ошибок. Какой тип данных и значение будет у каждого корректного параметра?
var myName = "Andrey" var mySurname: String let myAge = 28 let ageOfMyCat = 21 var sumOfAges = UInt(myAge + ageOfMyCat) let someText = "My name is \(myName). Im \(myAge) years old."
Ошибок нет (в некоторых случаях Xcode Playground может указать на ошибку в строке 2).
myName
— тип String
, значение «Andrey»mySurname
— не передано первоначальное значение переменной, по этой причине до первого обращения к параметру в нем должно появиться значениеmyAge
— тип Int
, значение 28ageOfMyCat
— тип Int
, значение 21sumOfAges
— тип UInt
, значение 49someText
— тип String
, значение «My name is Andrey. Im 28 years old.»Будет ли корректно выполнен следующий код? Как исправить код, если он работает некорректно?
var first = "myVar" let second: String second = first second = "myVar"
В связи с особенностями работы Xcode Playground, у вас может возникнуть ошибка в одном из следующих случаев:
Вариант 1: В Swift запрещено объявлять переменную или константу без инициализирующего значения (если конечно она не опционального типа данных, о которых мы будем говорить позже). В этом случае вы можете получить ошибку в строке № 2.
Вариант 2: Если Xcode Playground позволит вам создать пустую переменную, то ошибка возникнет в строке № 4, так как константе повторно инициализируется значения.
Будет ли корректно выполнен следующий код? Как исправить код, если он работает некорректно?
var one = 5 var two = -5.12 var three = UInt(one + two)
Код вызовет ошибку, т.к. функции UInt(_:)
в качестве параметра происходит попытка передачи результата сложения чисел разных типов (Int
и Double
).
Для исправления кода необходимо преобразовать значение переменной one к типу Double
, либо — two
к Int
. В данном случае это не важно, т.к. для преобразования дробного вида к целому просто отбрасывается дробная часть числа.
Будет ли корректно выполнен следующий код? Как исправить код, если он работает некорректно?
var one: Double = 12 var two = 3.14 one = two
Код будет выполнен корректно.
Объявите константу с именем myName
и проинициализируйте ей свое имя. Выведите на консоль строку Меня зовут [name]
, где вместо [name]
должно быть значение параметра myName
.
let myName = "Василий" print("Меня зовут \(myName)")
Вам даны две переменные. Первая дробного типа хранит в себе расстояние в километрах. Вторая целочисленная хранит в себе время в секундах, за которое преодолели данное расстояние.
Найдите скорость в метрах в минуту.
// расстояние var lengthOfPath = Double(52) // время var seconds = Int(360) // вычисление скорости в метрах в минуту var v = (lengthOfPath*1000) / (Double(seconds)/60)
Даны два целочисленных трехзначных числа. Найти шестизначное, образованное слиянием данных чисел в одно. К примеру из чисел 111
и 222
должно получиться 111222
.
var a = 166 var b = 556 var c = Int("\(a)\(b)")
Int8
и UInt8
. В одну из них запишите максимальное значение, которое может принять параметр типа UInt8, в другую — минимальное значение, которое может принять параметр типа Int8. Обратите внимание на то, какое значение в какую переменную может быть записано.//1 var a: Int8 = Int8.min var b: UInt8 = UInt8.max //2 print(a) print(b)
36 Comments
Зачем 19 задание?
У каждого человека свой уровень усвоения материала. Порой даже самые простые задания вызывают ступор. Но вы натолкнули меня на мысль: может быть стоит делить задания по уровням? К примеру бронзовый и золотой. Такие простые задания давать в самом начале в «бронзовом», а более сложные — в «золотом».
Предлагаю в 19 задание добавить ответ в одну строку:
print(» * * *\n * * * * \n * *»)
За то так приятнее смотритсяlet w = «»»* * * * * * * * *»»»print(w)
Вы можете вставить в комментарий код прямо из Xcode, при этом он сохранит свое форматирование (отступы и подсветку). Прям «в точности» как в Xcode!!!!!!!!!
Поправьте, если не прав.
Задание 9:
var distanceInKm: Double = 4 // 4
var timeInSec = 43 // 43
var speedInMetr = (distanceInKm * 1000) / (Double(timeInSec) / 60) // 5581.395348837209
Выходит, что правильный ответ — не правильный, поскольку тут кроме формулы по физике нужно юзнуть Decimal и импортировать Foundation, а еще прочитать доп материал к главе 5 =)
Да, ваш ответ верный. В нем точно так же, как и в приведенном выполняются все условия, но при этом Decimal не используется, а Foundation не нужен для типов Int и Double. Итоговый ответ именно в Double
print( type(of:speedInMetr) ) //Double
Виталий, здравствуйте. У меня к Вам вопрос по заданию 6 из главы 6 (Кортежи)
Спрашиваю здесь, так как в том разделе комментарии, по неведомой для меня причине, закрыты.
Продублирую сюда условие, чтобы было удобнее:
1. Объявите константу и запишите в нее свое имя.
2. Объявите переменную типа UInt8 и запишите в нее свой возраст.
3. Объявите кортеж и явно определите его тип данных, как (name: String, age: Int).
4. В первый элемент кортежа запишите значение константы с именем.
5. Во второй элемент кортежа запишите значение из переменной с вашим возрастом.
Мое решение:
let myName = «Roman»
var myAge: Int8 = 22
var (r1, r2) = (myName, Int(myAge))
print(» Я — \(r1) и мне \(r2) годика «)
Результат по факту один и тот же, но можете пояснить, правильным ли будет данное решение?
Ну по сути вы не выполнили третий пункт. У вас нет кортежа с типом (name: String, age: Int).
Вопрос по 4 заданию. Компилятор не выдал ошибки и все работает
Извиняюсь, 5 задание
Здравствуйте, Василий. Только начал изучать язык Swift по купленной Вашей книге. У меня вопрос: в задании № 10 в var c всё приведено к Int. А можно ли это задание сделать так, будет ли это тоже правильно? Спасибо:
let numOne = 111
let numTwo = 222
let numThree = («\(numOne)\(numTwo)»)
print(numThree)
Если ты получаешь тот же ответ, что и требуется, значит, ты сделал правильно 🙂
Почему в 4 задание ошибка 2? Просто Xcode не выдаст ошибку, он просто прировняет строку к nil.
Добавил комментарий в задании
18-е задание, 2-й пункт
В задании сказано указать константу, а во втором пункте указана переменная (var: char)
Спасибо за материал))
Исправил, спасибо!
Василий, это лучшие задачи что я когда либо делал, хоть я и только начал изучать Swift) Каждую задачу можно сделать, основываясь на материал из книги, однако над ними все равно надо хорошо подумать, благодаря чему материал усваивается НАМНОГО лучше, ну лично для меня, не знаю как остальным) Спасибо огромное, очень интересно, особенно мне понравилась задача №19, на первый взгляд не легкая, но после первой рабочей строчки кажащуяся очень простой.
Большое спасибо вам за отзывы! Надеюсь дальше будет только интереснее.
8-е задание, в правильном ответе потеряли условие с name:
let myName: String = «Dmitriy»
let name = myName
print («Меня зовут \(name)»)
Оно там не требуется, name — это просто заполнитель в строке. Скорее я не очень корректно указал задание.
По сути не имеет смысла создавать две переменные типа String.
Здравствуйте, не судите что «нашел к чему придраться», просто хочу исправить грамматическую ошибку в тексте. Выше сказано «быть проведены со значения различных типов» в слове «значения» не хватает окончания «ми», чтобы получилось «со значениями…»
Исправил. Спасибо!
Здравствуйте все.
Василий, или другие пользователи, подскажите, а почему в задании 14, подпункт 4, такое решение:
var res = Double(second).truncatingRemainder(dividingBy: third) // 4.999999618530273
?
Не правильней ли было бы так:
var res = Double(second.truncatingRemainder(dividingBy: Float(third))) // 5
?
Да, вы полностью правы. Хорошо, что находите более оптимальные пути решения. Внес правки
Привет, спасибо за задания очень радуют )
в задании №17 я сначала написал так : let pCircle1 = 2 * 3.14 * Double(length) // 69.08
почему Playground (ver 11.4) не ругается, что двойка не переведена в Double? Результат верный.
Я полагаю СРЕДА сама из выражения понимает, что результат Double и значит ранее необьявленные объекты вроде этой двойки автоматом переводятся ?
10 задание сделал так:
// Задание 10
var firstD = 111, secondD = 222
var six = String(firstD) + String(secondD)
var sixDec = Int(six)
А можете объяснить, в чем разница между моим решением и правильным ответом? Если и там и там получается вывести правильно цифру?//мое решениеlet number1 = 166let number2 = 556let number = String(number1) + String(number2)//правильный ответ var a = 166var b = 556var c = Int(«\(a)\(b)»)
Здравствуйте, непонятно задание 25, там и без скобок верный порядок, зачем скобки расставлять?5 * 3 — 4 / 2 * 2 //11 (5 * 3) — ((4 / 2) * 2) //11
Некоторые считают, что деление приоритетнее умножение при вычислении. Видел это в каком то ролике
Василий, я не уверен, когда писались эти задачки, но в части из них, где вы приводите цифры к Float, чтобы разделить, уже можно не делать
Для примера, у меня без ошибок работает такой скрипт (аналог из последней задачи):
var a = 13.13
var b = 31.31
let average = Float((a + b) / 2)
Добрый вечер,
В 25 номере можно вообще не ставить скобки, сделать как в ответе и поставить их только в части (4/2), Xcode везде выдаст 11.
А 19-ое задание можно выполнить через тройные кавычки, результат будет одинаковый.
Я 10-е так решил:
var num1 = 333
var num2 = 555
var sum = (num1*1000) + num
// 333555
Добрый день. В задании 6 помимо разных типов данных, будет выдаваться ошибка, так как функция UInt использует только беззнаковые типы данных. Правильно?
Здравствуйте. Начала изучать Swift по Вашей книге в печатном варианте (пятое издание). Пока все очень нравится. По данной главе возник вопросик. В таблице 5.1 для типа данных UInt и UInt64 указаны не удвоенные максимальные значения, а именно 9223372036854775807. Это опечатка? Или для данных типов данных есть исключение?
В 17 задании для Пи можно использовать Double.pi