У меня есть несколько вопросов для разработчиков Swift относительно концепции абстрактных классов.
- Как вы определяете абстрактный класс в Swift? Есть ли способ предотвратить создание экземпляра класса, предоставляя инициализатор для использования его подклассов?
- Как вы определяете абстрактные методы при реализации других? При определении абстрактных методов Apple обычно указывает вам на протоколы (интерфейсы). Но они решают первую часть моего вопроса, так как все методы, которые они определяют, являются абстрактными. Что вы делаете, когда хотите, чтобы в вашем классе были как абстрактные, так и не абстрактные методы?
- Как насчет дженериков? Возможно, вы подумали об использовании протоколов вместе с расширениями (категориями). Но тогда возникает проблема с generics, потому что протоколы не могут иметь общие типы, только типы.
Я сделал домашнее задание, и я знаю, как решить эти проблемы с помощью методов, таких как fatalError()
или preconditionFailure()
в суперклассе, а затем переопределить их в базовом классе. Но для меня это кажется уродливым объектом.
Причина, по которой я публикую это, - выяснить, существует ли более общее и универсальное решение.
Спасибо заранее, Petr.