```swift 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](https://medium.com/@abhimuralidharan/method-swizzling-in-ios-swift-1f38edaf984f)
Activity