Согласно 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)
}
Я думал, что у меня что-то не хватает, но я не понимаю, где полиморфная операция (метод или функция) для вызова во время выполнения здесь.
Какова цель динамической отправки здесь?