swift 为方法追加代码

来源:互联网 发布:java反射调用方法 编辑:程序博客网 时间:2024/04/30 11:59

很多时候嫌弃三方库或者系统框架的某个方法没有执行到自己想要的目的,进行如下代码修改。就可以达到追加代码的目的

////  ViewController.swift//  PanaStackView////  Created by 曾祥林 on 2017/3/2.//  Copyright © 2017年 曾祥林. All rights reserved.//import UIKitclass ViewController: UIViewController {    open override class func initialize() {        DispatchQueue.once(token: "haha") {            let originalSelector = #selector(ViewController.viewWillAppear(_:))            let swizzledSelector = #selector(ViewController.nsh_viewWillAppear(animated:))            let originalMethod = class_getInstanceMethod(self, originalSelector)            let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)            let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))            if didAddMethod {                class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))            } else {                method_exchangeImplementations(originalMethod, swizzledMethod);            }        }    }    // MARK: - Method Swizzling    func nsh_viewWillAppear(animated: Bool) {        self.viewWillAppear(animated)        NSLog("交叉出去了")    }    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.    }    override func viewWillAppear(_ animated: Bool) {        NSLog("没有交叉出去")    }}
0 0
原创粉丝点击