0Pricing
Swift Academy · Урок

Инициализаторы и deinit (классы)

Создавайте назначенные и удобные инициализаторы, задавайте значения по умолчанию, используйте failable init при необходимости и разбирайтесь с деинициализаторами классов.

«Инициализаторы и deinit (классы)» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.

Обзор

В этом уроке рассматриваются основные и вспомогательные инициализаторы, значения по умолчанию, инициализатор с возможностью сбоя и деинициализатор класса.

Основы инициализации структур

Структуры получают инициализатор со всеми членами. Задавайте значения по умолчанию, чтобы упростить вызовы.

struct User {
    var name: String = "Guest"   // default value
    var age: Int

    // memberwise init is synthesized: User(name:age:)
}
let u1 = User(name: "Ada", age: 20)
let u2 = User(age: 0)            // uses default name
print(u1.name, u2.name)

Основной инициализатор

Основной инициализатор гарантирует, что все хранимые свойства установлены до использования.

class Person {
    let name: String
    let id: Int

    // Designated initializer: fully initializes stored properties
    init(name: String, id: Int) {
        self.name = name
        self.id = id
    }
}
let p = Person(name: "Bob", id: 1)
print(p.name, p.id)

Вспомогательный инициализатор

Вспомогательные инициализаторы должны делегировать вызов основному инициализатору в том же классе.

class Rectangle {
    var width: Double
    var height: Double

    // Designated
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }

    // Convenience must call a designated initializer
    convenience init(square side: Double) {
        self.init(width: side, height: side)
    }
}
print(Rectangle(square: 3).width)

Инициализатор с возможностью сбоя

Используйте init? для входных данных, которые могут не пройти проверку. Результат является необязательным значением.

struct Email {
    let value: String
    init?(_ raw: String) {
        guard raw.contains("@") else { return nil } // fail to initialize
        self.value = raw
    }
}
print(Email("a@b.com")?.value ?? "invalid")
print(Email("not email")?.value ?? "invalid")

Деинициализатор

Только классы имеют деинициализатор, который вызывается при освобождении экземпляра (ARC).

class TempResource {
    let id: Int
    init(id: Int) { self.id = id }
    deinit { print("Releasing resource", id) }
}
do {
    let r = TempResource(id: 42)
    print("Using", r.id)
} // r goes out of scope; ARC may call deinit here

Основной и вспомогательный инициализаторы

Быстрая проверка: какой инициализатор в конечном счёте должны вызывать вспомогательные инициализаторы?

Повторение

Повторение: используйте основные инициализаторы для установки всех свойств; добавляйте вспомогательные инициализаторы для более удобных мест вызова; рассматривайте init? для проверки данных; классы выполняют очистку в деинициализаторе.

Часто задаваемые вопросы

Урок «Инициализаторы и deinit (классы)» бесплатный?

Да — полный текст урока «Инициализаторы и deinit (классы)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.

Чему я научусь в уроке «Инициализаторы и deinit (классы)»?

Создавайте назначенные и удобные инициализаторы, задавайте значения по умолчанию, используйте failable init при необходимости и разбирайтесь с деинициализаторами классов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Инициализаторы и deinit (классы)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Структуры и классы, свойства и инициализаторы
  2. Хранимые и вычисляемые свойства, наблюдатели
  3. Инициализаторы и deinit (классы)
← Назад к Swift Academy