ios面向切面AOP(下) swift版本
2015-11-14 16:21
351 查看
根据Objective-c版本,编写的swift版本
新建一个Swift文件,继承自UIViewController.
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } extension UIViewController { public override class func initialize() { struct Static { static var token:dispatch_once_t = 0; } // if self == UIViewController.self { dispatch_once(&Static.token) { swizzleMethod(aopClass: self, originalSelector: Selector("viewDidLoad"), swizzledSelector: Selector("aop_viewDidLoad")) swizzleMethod(aopClass: self, originalSelector: Selector("viewWillAppear:"), swizzledSelector: Selector("aop_viewWillAppear:")) swizzleMethod(aopClass: self, originalSelector: Selector("viewDidAppear:"), swizzledSelector: Selector("aop_viewDidAppear:")) swizzleMethod(aopClass: self, originalSelector: Selector("viewWillDisappear:"), swizzledSelector: Selector("aop_viewWillDisappear:")) swizzleMethod(aopClass: self, originalSelector: Selector("viewDidDisappear:"), swizzledSelector: Selector("aop_viewDidDisappear:")) } // } } func aop_viewDidLoad() { self.aop_viewDidLoad() if !self.isKindOfClass(NSClassFromString("UINavigationController")!) && !self.isKindOfClass(NSClassFromString("UIInputWindowController")!) && !self.isKindOfClass(NSClassFromString("UIAlertController")!) { print("aop_viewDidLoad~~~\(self)") } } func aop_viewWillAppear(animated: Bool) { self.aop_viewWillAppear(animated) if !self.isKindOfClass(NSClassFromString("UINavigationController")!) && !self.isKindOfClass(NSClassFromString("UIInputWindowController")!) && !self.isKindOfClass(NSClassFromString("UIAlertController")!) { print("aop_viewWillAppear~~~\(self)") } } func aop_viewDidAppear(animated: Bool) { self.aop_viewDidAppear(animated) if !self.isKindOfClass(NSClassFromString("UINavigationController")!) && !self.isKindOfClass(NSClassFromString("UIInputWindowController")!) && !self.isKindOfClass(NSClassFromString("UIAlertController")!) { print("aop_viewDidAppear~~~\(self)") } } func aop_viewWillDisappear(animated: Bool) { self.aop_viewWillDisappear(animated) if !self.isKindOfClass(NSClassFromString("UINavigationController")!) && !self.isKindOfClass(NSClassFromString("UIInputWindowController")!) && !self.isKindOfClass(NSClassFromString("UIAlertController")!) { print("aop_viewWillDisappear~~~\(self)") } } func aop_viewDidDisappear(animated: Bool) { self.aop_viewWillDisappear(animated) if !self.isKindOfClass(NSClassFromString("UINavigationController")!) && !self.isKindOfClass(NSClassFromString("UIInputWindowController")!) && !self.isKindOfClass(NSClassFromString("UIAlertController")!) { print("aop_viewDidDisappear~~~\(self)") } } } func swizzleMethod(aopClass aopClass:AnyClass,originalSelector:Selector,swizzledSelector:Selector) { let originalMethod = class_getInstanceMethod(aopClass, originalSelector) let swizzledMethod = class_getInstanceMethod(aopClass, swizzledSelector) let didAddMethod = class_addMethod(aopClass, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)) if didAddMethod { class_replaceMethod(aopClass, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)) } else{ method_exchangeImplementations(originalMethod, swizzledMethod) } }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- Apple Swift学习教程
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Java Runtime Environment 5.0 Update 12 下载
- yui3的AOP(面向切面编程)和OOP(面向对象编程)
- JavaScript AOP编程实例
- 使用AOP改善javascript代码
- 初识SmartJS - AOP三剑客
- 面向切面编程(AOP)的理解
- php set_magic_quotes_runtime() 函数过时解决方法
- Asp.Net 程序错误Runtime Error原因与解决
- java使用动态代理来实现AOP(日志记录)的实例代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法