Урок 15. Преобрзование типов
Главная / Уроки / Страница блока Основы / Урок 15. Преобразование типа. / Задача 15. Преобразование типов.
16 Мая 2023
Задача 15.1
Перед вами словарь:
let people = ["Tim": "56.76", "Bob": "78", "Helga": "36.2"]
Требуется получить значение по ключу “Tim” из словаря и преобразовать его в целое число. Если преобразование не удалось, присвоить значение 0.
let people = ["Tim": "56.76", "Bob": "78", "Helga": "36.2"]
let firstResult = Int(people["Tim"] ?? "") ?? 0
В данном коде мы используем оператор ??, чтобы извлечь значение по ключу “Tim” из словаря people. Если значение равно nil, мы используем пустую строку “” в качестве альтернативного значения. Затем мы преобразуем полученное значение в целое число с помощью Int(). Если преобразование не удалось, мы используем значение по умолчанию 0. Результат присваивается переменной firstResult.
Это задание можно было решить и с опциональной привязкой.
let people = ["Tim": "56.76", "Bob": "78", "Helga": "36.2"]
var firstResult = 0
if let timValue = people["Tim"], let timInt = Int(timValue) {
firstResult = timInt
}
Обратите внимание что в конструкции if можно извлекать значения последовательно, через запятую, сперва мы извлекаем значение, получаем свойство timValue, а затем мы это значение пытаемся преобразовать к типу Int. и внутри блока условия, мы присваиваем timInt ранее созданному свойству. В целом если вы создали свойство firstResult внутри условной конструкции if это тоже не будет считаться ошибкой, потому что в контексте не сказано как мы это новое свойство используем:
let people = ["Tim": "56.76", "Bob": "78", "Helga": "36.2"]
if let timValue = people["Tim"], let timInt = Int(timValue) {
let result = timInt
print(result)
} else {
let result = 0
print(result)
}
Но как вы можете заметить это не идеальное решение, кода стало в три раза больше. На самом деле это два разных подхода, и говорить что первый лучше второго не стоит. В первом случае у нас свойство firstResult будет доступно по всему проекту, а во втором result будет доступно только в локальной зоне блока. Они оба имеют место быть, в зависимости от задачи, которая перед вами стоит.
Если вы сделали привязку опционалов в разных условиях это тоже не ошибка:
let people = ["Tim": "56.76", "Bob": "78", "Helga": "36.2"]
if let timValue = people["Tim"] {
if let timInt = Int(timValue) {
let result = timInt
print(result)
} else {
let result = 0
print(result)
}
}
Но лучше использовать предыдущий вариант, так как там меньше скобок, которые делают код, тяжелым для восприятия, любая вложенная структура может усложнить код.
Задача 15.2
Создайте два свойства типа Int, и произведите над ними операцию деление, но сделайте так что бы результат получился типа Double.
let firstNumber = 11
let secondNumber = 8
let result = Double(firstNumber) / Double(secondNumber) // 1.375
Объявляем два свойства с типом Int, Затем производим операцию деления с использованием преобразования типов к Double. Результат сохраняется в переменной result.
Обратите внимание что все свойства должны быть константами, вы их в коде ни где не меняете, а просто используете в расчетах.
Приведение каждого из свойств к типу Double делает расчеты точнее, в отличии от следующего варианта:
let firstNumber = 11
let secondNumber = 8
let result = Double(firstNumber / secondNumber) // 1
Здесь сперва происходит деление, а потом уже преобразование, когда вы делите целое число на целое, то вы получаете результат Int, а это значит все что после запятой отбрасывается, в нашем случае останется единица, которую мы благополучно преобразуем в тип Double.
Так же нет смысла прописывать тип явно у свойств:
let firstNumber: Int = 11
let secondNumber: Int = 8
let result: Double = Double(firstNumber) / Double(secondNumber)
Из значений видно, какие типы данных вы используете. Вы производите преобразование двух чисел, и делаете между ними расчеты, поэтому компилятор по умолчанию определит тот тип который вернется, в нашем случае это тип Double.
“Преобразование к типу” еще называют “Приведением к типу”, но для второго понятия есть определенная концепция, которая к преобразованию не имеет ни какого отношения, о ней мы тоже будем разговаривать в дальнейшем.
Поддержите наш проект, и помогите изменить подход к обучению!
Развивайся вместе с нами
Поддержите наш проект, и помогите изменить подход к обучению!
Address List
Social Networks
Поддержите наш проект, и помогите изменить подход к обучению!
Social Networks