Junior — Middle
როგორ შეიძლება თვალყური ადევნოს viewDidLoad მეთოდის ზარებს პროგრამაში ყველა კონტროლერის მაგალითში?
sobes.tech AI
პასუხი AI-სგან
iOS-ში ყველა კონტროლერის მაგალითში viewDidLoad მეთოდის გამოძახების თვალსაზრისით, შეგიძლიათ გამოიყენოთ 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))")
}
}
// ერთჯერადი გამოძახება, მაგალითად, AppDelegate-ში
UIViewController.swizzleViewDidLoad
ეს მიდგომა საშუალებას გაძლევთ იპოვოთ viewDidLoad-ის გამოძახებები ყველა კონტროლერში, მათი წყაროს კოდში ცვლილების გარეშე.