Предоставляет ли Swift инициализатор по умолчанию для структур?

«Предоставляет ли Swift инициализатор по умолчанию для структур?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да. Swift автоматически генерирует memberwise initializer для структур, если вы не определяете собственные инициализаторы. Этот инициализатор принимает значения для всех хранимых свойств структуры.

Пример memberwise initializer:

struct Person {
    var name: String
    var age: Int
    var isEmployed: Bool = false // Свойство со значением по умолчанию
}

// Использование сгенерированного инициализатора
let alice = Person(name: "Alice", age: 30) // isEmployed будет false
let bob = Person(name: "Bob", age: 25, isEmployed: true)

Важные детали:

  • Инициализатор генерируется только если нет пользовательских инициализаторов.
  • Свойства со значениями по умолчанию становятся необязательными параметрами.
  • Вы можете определить собственные инициализаторы, но тогда memberwise initializer будет доступен только если вы реализуете его в extension.
struct CustomPerson {
    var name: String
    var age: Int

    // Пользовательский инициализатор
    init(fullName: String) {
        self.name = fullName
        self.age = 0
    }
}
// let p = CustomPerson(name: "Test", age: 1) // Ошибка: memberwise initializer недоступен