Pull to refresh

Comments 17

такое чувство — что про полиморфизм до Swift ни разу не слышали
Хорошая статья, только сумбурная немного. Некоторые моменты если б не знал заранее из статьи бы точно не понял. Яркий пример это объяснение множественного наследования. Примеры кода до и после слов «Но если использовать переменную...» не содержат реализацию extension для протокола, из-за чего полностью теряют смысл

Да, мне кажется надо еще добавить различия в выводах функций, чтобы понятно было. Что-то типа: в первом случае в консоли будет Cat yawn, во втором Pet yawn.

Схожая история будет, если наследовать один протокол другим, где есть функции, которые реализуются в расширениях. Компилятор не даст его собрать.

Что-то не понимаю, где в следующем за этим высказыванием примере, наследуется «один протокол другим»?
Не хочу показаться занудой, но хочется сказать по поводу того, что мы реализуем, а что наследуем. В статье в перемешку употребляются эти два глагола. Всё же протоколы мы реализуем, а классы наследуем. Точнее: класс реализует протокол, класс наследует класс, протокол наследует протокол. Или я не прав?
Но если использовать переменную не как протокол, а как класс, то всё будет нормально.
«Переменная как протокол», «переменная как класс»? Формулировки так себе.
Предложите свой вариант, пожалуйста. Использую его.
Да, верно. Только с терминологией тут достаточно интересно.
docs.swift.org/swift-book/LanguageGuide/Protocols.html
Указан глагол adopt, а не realize и conform.
Можно подобрать более корректный термин. Будут рад услышать варианты.
Conform используется в смысле «валидности протоколу», то есть, методы класса совпадают с методами протокола – это conform. А смысл двоеточия – это adopt.
Ну вот, отговорили меня изучать Swift (я не программист в профессиональном смысле и это не упрёк).
Такое впечатление, что авторы языка решили:
— А давайте навспоминаем побольше слов и как-нибудь используем их в качестве абстракций в концепции языка!
— А давайте!
(кстати, для этого диалога им тоже пришлось вспомнить несколько слов :)
Я правильно понял, что протокол здесь — суть то, что в C++ называется абстрактным классом (класс, созданный только в качестве родительского класса для других классов, то есть такого, экземпляров (объектов) которого не может существовать потому, например, что часть (или все) методы не имеют реализацию)?
Нет, абстрактный класс может содержать реализацию методов и данные он тоже может хранить, просто нельзя создать объект этого класса т.к. у него нет реализации хотя бы одного метода, протокол же не может хранить данные в принципе, да и с реализацией методов вопрос, мягко говоря, дискуссионный т.к. extension это не часть протокола как такового, это отдельная конструкция языка и применяется она не только к протоколам, но и к классам и структурам, более того, в официальном мануале свифта extension-ам посвящен отдельный раздел и идет он до протоколов
UFO just landed and posted this here
В разделе про @objc забыли упомянуть, что дефолтная имплементация и другие методы реализованные в protocol extensions, не доступны в objective-c
Спасибо за статью!
Специально залогинился, чтобы написать, что протоколы не обеспечивают множественное наследование. Протоколы вообще не про наследование.
Sign up to leave a comment.