Junior — Middle
Чӣ гуна метавон фароии функсияи viewDidLoad-ро дар ҳама нусхаҳои контроллерҳо дар барнома пайгирӣ кард?
sobes.tech AI
Ҷавоб аз AI
Барои пайгирии зангҳои усули 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() {
// Звон ба усули аслӣ (ҳоло swizzled_viewDidLoad)
swizzled_viewDidLoad()
// Логгирӣ ё дигар мантиқ
print("Занг ба `viewDidLoad` барои \(type(of: self))")
}
}
// Як бор занг занед, масалан дар AppDelegate
UIViewController.swizzleViewDidLoad
Ин усул имкон медиҳад, ки зангҳои viewDidLoad барои ҳама контролерҳоро бидуни тағир додани коди манбаъ пайгирӣ кунед.