首页 文章

Swift函数中的动态修饰符

提问于
浏览
13

根据Apple的说法:

使用动态修饰符标记成员声明时,始终会动态调度对该成员的访问 . 因为使用Objective-C运行时调度使用dynamic修饰符标记的声明,所以使用@objc属性隐式标记它们 .

根据维基百科:

动态分派是选择在运行时调用多态操作(方法或函数)的实现的过程 . 当不同的类由于公共继承而包含相同方法的不同实现时,动态分派通常用于面向对象的语言中 . 例如,假设您有类A,B和C,其中B和C都从A继承方法foo() . 现在假设x是类A的变量 . 在运行时,x实际上可能具有类型的值B或C,一般来说,你无法在编译时知道它是什么 .

现在,我正在研究dependency injection框架:Typhoon当我在从Objective-C类继承的所有类中打开Swift的示例项目 TyphoonAssembly 时,注入依赖项的所有方法相关都具有以下方式包含的 dynamic 修饰符:

public dynamic func weatherReportDao() -> AnyObject {
    return TyphoonDefinition.withClass(WeatherReportDaoFileSystemImpl.self)
}

我以为我知道这里的 polymorphic operation (method or function) to call at run time 在哪里 .

这里 dynamic dispatch 的目的是什么?

1 回答

  • 5

    本文将解答您的问题的答案:

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

    基本上在运行时,Typhoon Framework将用自己的例程替换你的方法,该例程实现了框架的功能,并调用你的方法来完成你为它定义的任何工作 .

    为了使框架能够替换方法,必须动态调度该方法 .

相关问题