Динамический модификатор в функциях в Swift
Согласно Apple:
Когда вы отмечаете объявление члена с помощью модификатора dynamic
, доступ к этому члену всегда динамически отправляется. Поскольку объявления, помеченные модификатором dynamic
, отправляются с использованием среды выполнения Objective-C, они неявно отмечены атрибутом @objc
.
Согласно Википедии:
динамическая диспетчеризация - это процесс выбора, какая реализация полиморфной операции (метода или функции) для вызова во время выполнения.
Динамическая отправка часто используется в объектно-ориентированных языках, когда разные классы содержат разные реализации одного и того же метода из-за общего наследования. Например, предположим, что у вас есть классы A
, B
и C
, где B
и C
оба наследуют метод foo()
от A
. Предположим теперь, что x
является переменной класса A
. Во время выполнения x
может фактически иметь значение типа B
или C
, и вообще вы не можете знать, что это такое во время компиляции.
Прямо сейчас, я изучаю зависимость вложения: Typhoon, и когда я открою образец проекта для Swift во всех классах, которые наследуются от класса Objective-C TyphoonAssembly
все методы, с которыми связаны родственники для инъекций, имеют модификатор dynamic
, включенный следующим образом:
public dynamic func weatherReportDao() -> AnyObject {
return TyphoonDefinition.withClass(WeatherReportDaoFileSystemImpl.self)
}
Я думал, что у меня что-то не хватает, но я не понимаю, где полиморфная операция (метод или функция) для вызова во время выполнения здесь.
Какова цель динамической отправки здесь?
Ответы
Ответ 1
Ответ на ваш вопрос рассматривается в этом сообщении:
https://github.com/appsquickly/typhoon/wiki/TyphoonAssembly
В основном во время выполнения Typhoon Framework заменит ваш метод своей собственной процедурой, которая реализует функции фреймворка и вызывает ваш метод для выполнения любой работы, которую вы определили для нее.
Чтобы фреймворк мог заменить этот метод, метод должен быть динамически отправлен.