Я пытаюсь понять, почему Swift применяет класс, соответствующий протоколу с инициализатором, который должен быть помечен как требуется. Это, по существу, принуждает любые подклассы также реализовать этот инициализатор. Разумеется, назначенный инициализатор суперкласса был бы унаследован?Swift: реализация инициализатора протокола в классе
Котировки ниже, взяты из Руководства Swift Язык: https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID272
Вы можете реализовать требование протокола инициализации на соответствующей класса либо как назначенный инициализаторе или удобства инициализаторе. В обоих случаях необходимо отметить реализацию инициализатора с требуемого модификатора:
class SomeClass: SomeProtocol {
required init(someParameter: Int) {
// initializer implementation goes here
}
}
class SomeSubclass: SomeClass {
required init(someParameter: Int) { // enforced to implement init again
// initializer implementation goes here
}
}
Использование требуемого модификатора гарантирует, что вы предоставляете явно или унаследованное выполнение требований инициализатора на всех подклассов соответствующего класса, так что они также соответствуют протоколу .
EDIT: я первоначально не упомянул, что я в настоящее время ограничивается Swift 2.1. Это, похоже, проблема компилятора в этой версии и не встречается в более поздних версиях.
Это имеет смысл для аргументации пометить его по мере необходимости. Я предполагаю, что отбросил меня в том, что в Swift 2.1 компилятор принуждает вас реализовать инициализатор суперклассов, даже если подкласс не имеет назначенных инициализаторов. –
Отметить это как принятое, поскольку он объясняет мой вопрос: «Конечно, назначенный инициализатор суперкласса был бы унаследован?». Первоначальная проблема, которую я имел, была связана с ограничением Swift 2.1. –