Sobes.tech
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.