-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
public extension UIColor {
@objc func colorDescription() -> String {
return "print rainbow colours"
}
private static let swizzleDescriptionImplementation: Void = {
let instance: UIColor = UIColor.red
let aClass: AnyClass! = object_getClass(instance)
let originalMethod = class_getInstanceMethod(aClass, #selector(description))
let swizzleMethod = class_getInstanceMethod(aClass, #selector(colorDescription))
if let originalMethod = originalMethod, let swizzleMethod = swizzleMethod {
method_exchangeImplementations(originalMethod, swizzleMethod)
}
}()
public static func swizzleDesription() {
_ = self.swizzleDescriptionImplementation
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(tableView)
print(UIColor.red)
print(UIColor.green)
UIColor.swizzleDesription()
print("\nswizzled\n")
print(UIColor.red)
print(UIColor.red)
UIColor.swizzleDesription()
print("\nTrying to swizzle again\n")
print(UIColor.red)
print(UIColor.red)
}通过打印结果可见多次swizzleDescription操作,只会生效一次,并不会重复swizzle
详情请见Method swizzling in iOS swift