Урок 19. Вычисляемые свойства
Главная / Уроки / Страница блока Основы / Урок 19. Вычисляемые свойства / Задача 19. Вычисляемые свойства.
24 Апреля 2023
Задача 19.1
Создайте два свойства, первое будет хранить имя человека, а второе фамилию. Создайте вычисляемое свойство, которое возвращает полное имя. Выведите полное имя на консоль.
let firstName = "Tim"
let lastName = "Cook"
var fullName: String {
"\(firstName) \(lastName)"
}
print(fullName)
Свойства для имени и для фамилии должны быть константами. В блоке вычисляемого свойства определяем полное имя, использовав для этого интерполяцию.
Ни return ни блока get здесь прописывать не нужно, следующий код будет считаться не корректным:
let firstName = "Tim"
let lastName = "Cook"
var fullName: String {
get {
return "\(firstName) \(lastName)"
}
}
print(fullName)
На логику это ни как не повлияет, но выдаст в вас дилетанта, поэтому лучше не писать лишний код, а использовать предложенную конструкцию ранее.
Так же не стоит делать вычисляемое свойство в одну строку:
let firstName = "Tim"
let lastName = "Cook"
var fullName: String { "\(firstName) \(lastName)" }
print(fullName)
Это уменьшило количество строк кода, но ухудшило восприятие, такой код сложнее разбирать.
Есть еще одно не плохое решение с использованием конкатенации:
let firstName = "Tim"
let lastName = "Cook"
var fullName: String {
firstName + " " + lastName
}
print(fullName)
Все что мы делаем это складываем строки, при этом добавляя между ними пробел, но следует учитывать тот момент, что код с конкатенацией строк будет гораздо медленнее чем с интерполяцией, поэтому работать с ней нужно аккуратно.
Задача 19.2
У вас есть свойство firstName:
let firstName = "Tim"
Создайте вычисляемое свойство, которое возвращает значение firstName
и устанавливает новое значение для firstName
, только если новое значение не пустая строка.
var firstName = "Tim"
var updatedFirstName: String {
get {
firstName
}
set {
if !newValue.isEmpty {
firstName = newValue
}
}
}
// Пример использования
print(firstName) // "Tim"
updatedFirstName = "Tom"
print(firstName) // "Tom"
updatedFirstName = "" // Не обновится, так как пустая строка
print(firstName) // "Tom"
Свойство updateFirstName является и геттером и сеттером, так как по условию мы должны принимать новое значение. Напомню что блок get срабатывает каждый раз когда мы просто обращаемся к вычисляемому свойству, а блок set в тот момент, когда мы присваиваем новое значение. Внутри блоков можно производить любые действия, в том числе и делать различные проверки.
В примере использования мы устанавливаем новое значение updatedFirstName
равным “Tom”, и значение firstName
меняется на “Tom”. Затем мы пытаемся установить пустую строку в updatedFirstName
, но значение firstName
не меняется, так как пустая строка не проходит проверку на пустоту.
Вы можете заметить в блоке get нет необходимости прописывать return, это будет лишним кодом.
Так же обратите внимание на синтаксис, и старайтесь его придерживаться.
Поддержите наш проект, и помогите изменить подход к обучению!
Развивайся вместе с нами
Поддержите наш проект, и помогите изменить подход к обучению!
Address List
Social Networks
Поддержите наш проект, и помогите изменить подход к обучению!
Social Networks