Swift函数中的动态修饰符

时间:2015-04-16 21:42:58

标签: ios swift inheritance dynamic dynamic-dispatch

根据Apple的说法:

  

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

根据维基百科:

  

动态分派是选择在运行时调用多态操作(方法或函数)的实现的过程。

     

当不同的类由于公共继承而包含相同方法的不同实现时,动态分派通常用于面向对象的语言中。例如,假设您有类ABC,其中BC都从{{继承foo()方法1}}。现在假设A是类x的变量。在运行时,A实际上可能具有xB类型的值,并且通常您无法在编译时知道它是什么。

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

dynamic

我认为我遗漏了一些东西,但我不明白这里多态操作(方法或函数)在运行时调用

这里动态调度的目的是什么?

1 个答案:

答案 0 :(得分:5)

您的问题的答案在这篇文章中得到解决:

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

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

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