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

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