Ответ
Класс в Swift не получает автоматически сгенерированный memberwise инициализатор, в отличие от структур. Это происходит, если:
- Свойства класса не имеют значений по умолчанию.
- Суперкласс не предоставляет доступный инициализатор (в случае наследования).
- Класс определяет собственный designated инициализатор — это отключает наследование инициализаторов.
Пример:
class Person {
var name: String // Нет значения по умолчанию
var age: Int // Нет значения по умолчанию
// Без явного инициализатора компиляция не удастся
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
Решение:
- Задать значения по умолчанию свойствам (
var name: String = ""). - Реализовать собственные designated инициализаторы.
- Для структур memberwise инициализатор предоставляется автоматически.