Junior — Middle
Ako sledovať volania metódy viewDidLoad vo všetkých inštanciách kontrolerov v aplikácii?
sobes.tech AI
Odpoveď od AI
Na sledovanie volaní metódy viewDidLoad vo všetkých inštanciách kontrolérov v iOS môžete použiť metódu swizzling — dynamickú náhradu implementácie metódy počas behu.
Príklad v Swift:
import UIKit
extension UIViewController {
static let swizzleViewDidLoad: Void = {
let originalSelector = #selector(viewDidLoad)
let swizzledSelector = #selector(swizzled_viewDidLoad)
guard let originalMethod = class_getInstanceMethod(UIViewController.self, originalSelector),
let swizzledMethod = class_getInstanceMethod(UIViewController.self, swizzledSelector) else { return }
method_exchangeImplementations(originalMethod, swizzledMethod)
}()
@objc func swizzled_viewDidLoad() {
// Volanie pôvodnej `viewDidLoad` (teraz `swizzled_viewDidLoad`)
swizzled_viewDidLoad()
// Logovanie alebo iná logika
print("volanie `viewDidLoad` pre \(type(of: self))")
}
}
// Zavolajte swizzling raz, napríklad v AppDelegate
UIViewController.swizzleViewDidLoad
Tento prístup umožňuje zachytiť volania viewDidLoad pre všetky kontroléry bez zmeny ich zdrojového kódu.