0Pricing
Swift Academy · Урок

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

Разберитесь в автоматически создаваемых инициализаторах со всеми свойствами и научитесь писать пользовательские инициализаторы.

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

Добро пожаловать

Структуры Swift получают бесплатный инициализатор со всеми сохранёнными свойствами. Однако его можно настроить или расширить с помощью собственной логики инициализации.

Автоматически созданный инициализатор

```swift struct Point { var x: Double var y: Double } let p = Point(x: 3.0, y: 4.0) // auto-generated init ``` Вам не нужно самостоятельно писать `init` — компилятор предоставляет его.

Добавление пользовательского инициализатора

```swift struct Circle { var radius: Double var area: Double init(radius: Double) { self.radius = radius self.area = .pi * radius * radius } } let c = Circle(radius: 5.0) ```

Сохранение поэлементного инициализатора

Определение пользовательского инициализатора подавляет автоматически создаваемый поэлементный инициализатор. Чтобы сохранить оба, поместите пользовательский инициализатор в расширение: ```swift struct Rect { var width: Double; var height: Double } extension Rect { init(square side: Double) { self.init(width: side, height: side) } } // Both Rect(width:height:) and Rect(square:) available ```

Значения свойств по умолчанию

```swift struct Config { var debug = false var maxRetries = 3 var timeout: TimeInterval = 30 } let c1 = Config() // all defaults let c2 = Config(debug: true) // memberwise with overrides ```

Делегирование инициализации с помощью self.init

```swift struct Temperature { var celsius: Double init(celsius: Double) { self.celsius = celsius } init(fahrenheit: Double) { self.init(celsius: (fahrenheit - 32) / 1.8) } init(kelvin: Double) { self.init(celsius: kelvin - 273.15) } } ```

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

```swift struct Percentage { let value: Double init?(_ value: Double) { guard (0...100).contains(value) else { return nil } self.value = value } } let p = Percentage(105) // nil ```

Инициализация с проверкой

```swift struct Username { let value: String init?(_ raw: String) { let trimmed = raw.trimmingCharacters(in: .whitespaces) guard trimmed.count >= 3 else { return nil } self.value = trimmed } } ```

Инициализация структур и классов

Ключевые отличия от инициализаторов классов: • Структуры могут использовать делегирование с помощью `self.init()` • Структуры не наследуют инициализаторы (нет `super.init()`) • Перед использованием все хранимые свойства должны быть инициализированы • Нет ключевых слов `required` или `designated` / `convenience`

Предварительный обзор init(from decoder:)

Структуры, соответствующие `Decodable`, получают автоматический инициализатор: ```swift struct User: Decodable { let name: String let age: Int } // Auto-synthesised init(from:) for JSON decoding let user = try JSONDecoder().decode(User.self, from: json) ```

Быстрая проверка

Где следует разместить пользовательский инициализатор, чтобы сохранить автоматически создаваемый поэлементный инициализатор?

Итоги

Основные выводы: • Компилятор бесплатно создаёт для структур поэлементный инициализатор • Пользовательские инициализаторы в теле структуры подавляют поэлементный инициализатор • Размещайте пользовательские инициализаторы в расширениях, чтобы сохранить оба варианта • Используйте `self.init()`, чтобы делегировать инициализацию между инициализаторами • Инициализаторы с возможностью сбоя возвращают `nil` при недопустимом вводе Далее: хранимые свойства и наблюдатели свойств.

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

Урок «Инициализаторы со всеми свойствами и пользовательские инициализаторы» бесплатный?

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

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

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

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

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

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

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

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

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

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

  1. Инициализаторы со всеми свойствами и пользовательские инициализаторы
  2. Хранимые свойства и наблюдатели свойств
  3. Вычисляемые свойства в структурах
  4. Изменяющие методы и семантика копирования при записи
← Назад к Swift Academy