Open sustainable-git opened 2 years ago
extension UIViewController {
static let swizzledMethod: Void = {
let originalMethod = class_getInstanceMethod(UIViewController.self, #selector(viewWillAppear))
let swizzledMethod = class_getInstanceMethod(UIViewController.self, #selector(myViewWillAppear))
if let origin = originalMethod, let swizzle = swizzledMethod {
method_exchangeImplementations(origin, swizzle)
}
}()
@objc func myViewWillAppear() {
print("test")
}
}
Method Swizzling은 원래의 메서드를 runtime에 원하는 메서드로 변경해 사용할 수 있도록 하는 기법입니다. UIViewController의 viewWillAppear같은 메서드를 원하는 메서드로 변경해 여러 ViewController에 한번에 작업을 수행하는 방식으로도 사용이 가능합니다. (앱 분석기능을 적용하는 경우 여러 ViewController에 같은 동작을 수행해야하는 경우가 있습니다. 이럴 때 하나씩 적용하는 것보단, Method Swizzling으로 한번에 처리하는 것이 효율적인 것이지요.)
Method Swizzing은 위와 같은 코드로 적용이 가능합니다. 이렇게하고 앱의 시작과정에서
이를 호출하는 것으로 작업을 처리할 수 있습니다.