博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift4 交换方法
阅读量:6221 次
发布时间:2019-06-21

本文共 2805 字,大约阅读时间需要 9 分钟。

hot3.png

你可以已经网上找了一些方法发现

1:initialize swift4已经无法重写

////  ViewController.swift//  TestOnce////  Created by point on 2018/5/22.//  Copyright © 2018年 whiteboard. All rights reserved.//import UIKit//extension UIViewController {    public  class func myOnceMethod() {        DispatchQueue.once(token: "ddddddd") {            let originalSelector = Selector.sysP            let swizzledSelector = Selector.sysP2            changeMethod(originalSelector, swizzledSelector, self)        }    }            static func changeMethod(_ original:Selector,_ swizzled:Selector,_ object: AnyClass) -> () {                let originalMethod = class_getInstanceMethod(object, original)        let swizzledMethod = class_getInstanceMethod(object, swizzled)                let didAddMethod: Bool = class_addMethod(object, original, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))        if didAddMethod {            class_replaceMethod(object, swizzled, method_getImplementation(originalMethod!), method_getTypeEncoding(originalMethod!))        } else {            method_exchangeImplementations(originalMethod!, swizzledMethod!)        }    }                    @objc func DCPresent(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Swift.Void)? = nil) {        print("sssss")                DispatchQueue.main.async {            self.DCPresent(viewControllerToPresent, animated: flag, completion: nil)        }    }}fileprivate extension Selector {    //    static let viewWillAppear = #selector(UIViewController.viewWillAppear(_:))    //    static let yz_viewWillAppear = #selector(UIViewController.yz_viewWillAppear(animated:))            static let sysP = #selector(UIViewController.present(_:animated:completion:))    static let sysP2 = #selector(UIViewController.DCPresent(_:animated:completion:))}class ViewController: UIViewController {                    override func viewDidLoad() {        super.viewDidLoad()            }        override func touchesBegan(_ touches: Set
, with event: UIEvent?) { self.present(SBViewController(), animated: true, completion: nil) }}extension DispatchQueue { private static var onceTracker = [String]() open class func once(token: String, block:() -> Void) { objc_sync_enter(self) defer { objc_sync_exit(self) } if onceTracker.contains(token) { return } onceTracker.append(token) block() }}

 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {        UIViewController.myOnceMethod()        // Override point for customization after application launch.        return true    }

 

转载于:https://my.oschina.net/zhaodacai/blog/1816617

你可能感兴趣的文章
红帽新目标:50亿美元俱乐部
查看>>
如何在 OpenShift 上部署 NodeJS 应用
查看>>
公共云与私有云的成本计算比较
查看>>
一名黑客小鲜肉的“平凡之路”
查看>>
Linux Shell流程控制
查看>>
设计模块化数据中心
查看>>
一个“没节操”的黑客,2015年能赚多少钱?
查看>>
2016-2020年全球5G设备市场增长率预计达32%
查看>>
企业级云应用平台的实践和思考
查看>>
同一性是解锁物联网真正潜力的关键
查看>>
最新数据中心网络架构技术纵览
查看>>
你必须了解的基础的Linux网络命令
查看>>
中国电信将在5月12日发布物联网新政策
查看>>
路由器会泄露隐私信息? 黑客瞄准最前沿科技
查看>>
央视曝光网络消费陷阱 钓鱼网站变身成公众号骗取钱财
查看>>
CIA无法通过工厂固件攻破苹果的AirPort
查看>>
《测试驱动的嵌入式C语言开发》——1.1节为什么我们需要TDD
查看>>
IP RPR技术在地铁骨干网大规模应用 —— H3C承建香港地铁统一通信多业务承载网CDN...
查看>>
雅虎持有阿里530亿美元股份 但投资者估值却没那么高
查看>>
安防巨头大华半年股价翻倍的背后,AI起到了哪些作用
查看>>