Подтвердить что ты не робот

Динамический модификатор в функциях в 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)
}

Я думал, что у меня что-то не хватает, но я не понимаю, где полиморфная операция (метод или функция) для вызова во время выполнения здесь.

Какова цель динамической отправки здесь?

4b9b3361

Ответ 1

Ответ на ваш вопрос рассматривается в этом сообщении:

https://github.com/appsquickly/typhoon/wiki/TyphoonAssembly

В основном во время выполнения Typhoon Framework заменит ваш метод своей собственной процедурой, которая реализует функции фреймворка и вызывает ваш метод для выполнения любой работы, которую вы определили для нее.

Чтобы фреймворк мог заменить этот метод, метод должен быть динамически отправлен.