Skip to content

Instantly share code, notes, and snippets.

@ratulSharker
Last active October 14, 2019 17:18
Show Gist options
  • Save ratulSharker/246d4b5822c3ed6fc2eb03904aea5723 to your computer and use it in GitHub Desktop.
Save ratulSharker/246d4b5822c3ed6fc2eb03904aea5723 to your computer and use it in GitHub Desktop.
Swift-Obj-c Method swizzling for common task.
extension UIViewController {
@objc func analytics() {
print("Analytics related implementation")
analytics()
}
static func swizzle() {
// We will swizzle here
let originalImpl = class_getInstanceMethod(UIViewController.self, #selector(UIViewController.viewDidLoad))
let swizzleImpl = class_getInstanceMethod(UIViewController.self, #selector(UIViewController.analytics))
method_exchangeImplementations(swizzleImpl!, originalImpl!)
print("swizzled")
}
}
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
UIViewController.swizzle()
let obj = MyViewController()
obj.viewDidLoad()
/* TEST Section
class InternalUIViewController : UIViewController {
override func viewDidLoad() {
print("InternalUIViewController viewDidLoad implementation")
}
}
extension InternalUIViewController {
@objc func analytics() {
print("Analytics related implementation")
analytics()
}
static func swizzle() {
// We will swizzle here
let originalImpl = class_getInstanceMethod(InternalUIViewController.self, #selector(InternalUIViewController.viewDidLoad))
let swizzleImpl = class_getInstanceMethod(InternalUIViewController.self, #selector(InternalUIViewController.analytics))
method_exchangeImplementations(swizzleImpl!, originalImpl!)
print("swizzled")
}
}
class MyWorkingViewController: InternalUIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
InternalUIViewController.swizzle()
let obj = MyWorkingViewController()
obj.viewDidLoad()
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment