Инициализаторы
Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 4 из 57.
Инициализатор, записываемый как init, выполняется при создании экземпляра и задаёт начальные значения свойств. Его параметры становятся аргументами вызова типа:
class Book {
var title: String
var pages: Int
init(title: String, pages: Int) {
self.title = title
self.pages = pages
}
}
let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)Вывод:
Dune
412Каждому свойству нужно присвоить значение, прежде чем экземпляр можно будет использовать. Свойство без значения по умолчанию должно быть задано в init, иначе класс не скомпилируется. Свойству, объявленному с помощью let, можно один раз присвоить значение в init, после чего его уже нельзя изменить:
class Book {
let isbn: String // устанавливается один раз, в init
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}Параметры init могут иметь значения по умолчанию, поэтому вызывающий код указывает только отличающиеся значения:
class Timer {
var seconds: Int
var label: String
init(seconds: Int, label: String = "timer") {
self.seconds = seconds
self.label = label
}
}
let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")Вывод:
egg 300
timer 30У класса может быть несколько инициализаторов, каждый с разными параметрами. convenience init заполняет некоторые значения и вызывает основной инициализатор с помощью self.init(...):
class Temperature {
var celsius: Double
init(celsius: Double) {
self.celsius = celsius
}
convenience init(fahrenheit: Double) {
self.init(celsius: (fahrenheit - 32) * 5 / 9)
}
}
print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)Вывод:
20.0
100.0Задание
ЛегкоНапишите инициализатор класса Account. Он принимает owner и необязательный balance, значение которого по умолчанию равно 0, и сохраняет оба значения. Затем завершите summary(), который возвращает Ada has 150.
Предоставленный код считывает имя владельца и, если присутствует вторая строка, начальный баланс. Он создаёт счёт с балансом или без него и выводит summary().
Ваш код должен находиться в Account.swift. В main.swift содержится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
// Предоставленный код ввода/вывода: оставьте его как есть
var input: [String] = []
while let line = readLine() { input.append(line) }
let account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовМетоды и selfИнициализаторыКлассы — это ссылкиПовторение — читательский билет4Инкапсуляция
Контроль доступаТолько чтение извнеЗащита состоянияИнициализаторы с возможностью сбояПовторение — банковский счёт7Полиморфизм и обобщения
ПолиморфизмПриведение типовОбобщённые функцииОбобщённые типыПовторение — калькулятор фигур10Паттерны проектирования. Часть 2
Паттерн делегированияПаттерн декораторПаттерн строительПаттерн состояния2Структуры и типы-значения
СтруктурыСемантика значенийИзменяющие методыСтруктура или классПовторение — элемент инвентаря5Наследование
ПодклассыПереопределение методовИнициализаторы и superfinal и иерархииПовторение — иерархия сотрудников8Стандартные протоколы
CustomStringConvertibleEquatableComparableHashableПовторение — пользовательская сортировка11Проект: Управление библиотекой
Книги и читателиВыдача книгПотренируйтесь самостоятельно: Песочница Swift