Junior — Middle
Kaip galima stebėti viewDidLoad metodo iškvietimus visuose valdiklių pavyzdžiuose programoje?
sobes.tech AI
Atsakymas iš AI
Norint stebėti viewDidLoad metodo iškvietimus visuose iOS kontrolerių egzemplioriuose, galite naudoti swizzling metodą — dinamišką metodo įgyvendinimo pakeitimą vykdymo metu.
Pavyzdys Swift kalba:
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() {
// Originalo `viewDidLoad` iškvietimas (dabar `swizzled_viewDidLoad`)
swizzled_viewDidLoad()
// Žurnalo įrašymas ar kita logika
print("`viewDidLoad` iškviestas \(type(of: self))")
}
}
// Vieną kartą iškvieskite, pvz., AppDelegate
UIViewController.swizzleViewDidLoad
Šis požiūris leidžia pagauti viewDidLoad iškvietimus visų kontrolerių, nekeičiant jų šaltinio kodo.