Swift 5 подкласс от супер с необходимым init - PullRequest
0 голосов
/ 09 июня 2019

Я работаю через ученика Swift 3-го издания.

Книга быстро пропускает необходимые инициализаторы.

Если у меня есть суперкласс:

class Animal {
    let animalType: String

    required init(animalType: String) {
        self.animalType = animalType
    }

    convenience init(animal: Animal) {
        self.init(animalType: animal.animalType)
    }
}

изатем подкласс, такой как:

class WildAnimal: Animal {
    let name: String

    required init(animalType: String) {
        name = ""
        super.init(animalType: animalType)
    }
}

Единственный способ, которым я могу инициализировать подкласс, - это присвоить значения заполнителя в необходимом init.т.е. я должен был поставить имя = "".

Нет ли способа инициализировать параметры подклассов во время инициализации, если родительский класс имеет требуемый init?

1 Ответ

1 голос
/ 09 июня 2019

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

class WildAnimal: Animal {
    var name: String

    required init(animalType: String) {
        name = ""
        super.init(animalType: animalType)
    }

    init(animalType: String, name: String) {
        self.name = name
        super.init(animalType: animalType)
    }
}

Принуждение подклассов определять инициализаторы de required - это точка required.

Напишите требуемый модификатор перед определением класса инициализатор, чтобы указать, что каждый подкласс класса должен реализовать этот инициализатор

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...