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