我是一名iOS开发人员,想学习面向切面编程。但是Swift支持面向切面编程吗?
摘要:
NB1:某些语言(如Java)采用静态/虚函数表式的方法调度仍然支持运行时方法拦截。这是因为它们依赖于虚拟机以及类加载器,另一个钩子入口。实际上,由于这一点,Java仍被归类为“后期绑定”语言。
NB2:在某些限制下,技术上可以对已编译成机器码二进制文件进行编译时织入。第一种情况是因为实现工作量很高,必须针对每个平台重复执行,因此没有太多的工具来支持它。第二种情况是它限制了可用的AOP功能。
不幸的是,Swift本身目前没有运行时支持。您需要依赖Objective-C桥接。
这里有一个全新的AOP库适用于iOS,用Objective-C编写,且支持Swift。
https://github.com/MO-AI/MOAspects
只有“前置方法”和“后置方法”可用,但在大多数情况下,它足以解决您的问题。 请注意,在针对纯Swift类/方法拦截时,可能需要将“dynamic”关键字添加到您的函数中,以确保正常工作。
MOAspects优于两个最著名的Objective-C AOP库Aspects和BlockInjection。 Aspects不支持类方法拦截和多次钩入类层次结构中的方法。 BlockInjection存在一个重大问题,即不支持64位。