Урок 21. Инициализаторы класса
Главная / Уроки / Страница блока Основы / Урок 21. Инициализаторы Класса / Задача 21. Инициализаторы Класса
28 Апреля 2023
Задача 21.1 
Создайте класс Person
, который имеет свойства firstName
, lastName
и fullName
. Свойство fullName
должно вычисляться на основе firstName
и lastName
. Напишите инициализатор, который принимает имя и фамилию и устанавливает их в соответствующие свойства.
Создайте экземпляр данного класса и выведите на консоль сообщение: “Имя: <…>, фамилия: <…>, полное имя: <…>”
class Person {
let firstName: String
let lastName: String
var fullName: String {
"\(firstName) \(lastName)"
}
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
}
let person = Person(firstName: "Иван", lastName: "Иванов")
print("Имя: \(person.firstName), фамилия: \(person.lastName), полное имя: \(person.fullName)")

Обратите внимание, что свойства firstName и lastName должны быть константами, потому что мы их инициализируем в момент создания экземпляра класса.
Внутри вычисляемого свойства не должно быть ключевого слова return, так как здесь всего одна строчка кода, и система прекрасно понимает что мы возвращаем строку. Блок вычисляемого свойства мы обязательно должны раскрыть, запись в одну строчку усложняет понимание вашего кода.
Большое внимание уделите синтаксису, после init не должно быть пробелов, открывающая круглая скобка плотно прилегает к имени метода. Необходимо разделять блок на логические блоки, следующая запись будет считаться не лучшим решением:
class Person {
let firstName: String
let lastName: String
var fullName: String { "\(firstName) \(lastName)" }
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
}
let person = Person(firstName: "Иван", lastName: "Иванов")
print("Имя: \(person.firstName), фамилия: \(person.lastName), полное имя: \(person.fullName)")

Такой код очень тяжело читать и понимать.
Задача 21.2 
Создайте перечисление с кейсами для цвета. Что бы сделать свойство не обязательным для инициализации можно задать свойству начальное значение, либо задать начальное значение в инициализаторе.
Lable
, в котором должно быть два свойства title
с типом String
и titleColor
с типом Color
, где Color
это перечисление с набором цветов. Значения для свойств класса Lable
должны задаваться через инициализатор, при этом цвет должен быть не обязательным к инициализации.
enum Color {
case red
case green
case blue
}
class Label {
let title: String
let titleColor: Color
init(title: String, titleColor: Color = .blue) {
self.title = title
self.titleColor = titleColor
}
}

Сперва создаем перечисление Color
с тремя возможными значениями: red
, green
и blue
. Затем создаем класс Label
, который имеет два свойства: title
типа String
и titleColor
типа Color
. Инициализатор init
для класса Label
принимает два параметра: title
и titleColor
. Параметр title
является обязательным и передается при создании экземпляра класса. Параметр titleColor
является необязательным и имеет значение по умолчанию .blue
, что означает, что если он не указан при создании экземпляра класса, то свойство titleColor
будет установлено в значение blue
.
Например, следующий код создает экземпляр класса Label
с заголовком “Hello” и цветом red
:
let firstLabel = Label(title: "Hello", titleColor: .red)
Если бы мы создали экземпляр класса без указания цвета, то его цвет был бы установлен в значение blue
, как показано ниже:
let secondLabel = Label(title: "Hello")
print(secondLabel.titleColor) // выводит "blue"
Следующее решение тоже считается хорошим:
enum Color {
case red
case green
case blue
}
class Label {
let title: String
let titleColor: Color = .blue
init(title: String) {
self.title = title
}
}

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


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

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

Social Networks