Урок 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

Поддержите наш проект, и помогите изменить подход к обучению!