Junior — Middle
Jak sledovat volání metody viewDidLoad ve všech instancích kontrolerů v aplikaci?
sobes.tech AI
Odpověď od AI
Pro sledování volání metody viewDidLoad ve všech instancích kontrolerů v iOS můžete použít metodu swizzling — dynamickou náhradu implementace metody za běhu.
Pří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() {
// Volání původní metody (nyní swizzled_viewDidLoad)
swizzled_viewDidLoad()
// Logování nebo jiná logika
print("viewDidLoad voláno pro \(type(of: self))")
}
}
// Zavolejte swizzling jednou, například v AppDelegate
UIViewController.swizzleViewDidLoad
Tento přístup umožňuje zachytit volání viewDidLoad u všech kontrolerů bez změny jejich zdrojového kódu.