Junior — Middle
Kako pratiti pozive metode viewDidLoad u svim instancama kontrolera u aplikaciji?
sobes.tech АИ
Одговор од АИ
За праћење позива методе viewDidLoad у свим примерцима контролера у iOS-у, можете користити метод swizzling — динамичку замену реализације метода у току извршавања.
Пример у 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() {
// Позив на оригинални `viewDidLoad` (сад `swizzled_viewDidLoad`)
swizzled_viewDidLoad()
// Логовање или друга логика
print("Позив `viewDidLoad` за \(type(of: self))")
}
}
// Позовите swizzling једном, нпр. у AppDelegate-у
UIViewController.swizzleViewDidLoad
Овај приступ омогућава да се ухвате позиви viewDidLoad за све контролере без измене њиховог извора кода.