如何在Swift中使用Aspects

2019-08-27  本文已影响0人  championfu

Aspects是一个轻量级的优秀AOP的工具,Aspects是用OC编写,OC强大的运行时特性,使得类型转换十分方便,但这一点在Swift中存在一点问题,利用Swift的编译器可以将Block对象转换成Swift的闭包.话不多说,下面的分类请点个赞后拿走

extension NSObject {
  
    typealias AspectsBlock = (AspectInfo)->()
    
    func swift_hook(with sel: Selector, options: AspectOptions, usingBlock: @escaping AspectsBlock) throws {
        let blockObj: @convention(block) (_ id: AspectInfo)->Void = { aspectInfo in
            usingBlock(aspectInfo)
        }
        try self.aspect_hook(sel, with: options, usingBlock: blockObj)
    }
    
    static func swift_hook(with sel: Selector, options: AspectOptions, usingBlock: @escaping AspectsBlock) throws {
        let blockObj: @convention(block) (_ id: AspectInfo)->Void = { aspectInfo in
            usingBlock(aspectInfo)
        }
        try self.aspect_hook(sel, with: options, usingBlock: blockObj)
    }
}
上一篇 下一篇

猜你喜欢

热点阅读