Sobes.tech
Junior — Middle

Ako sledovať volania metódy viewDidLoad vo všetkých inštanciách kontrolerov v aplikácii?

sobes.tech AI

Odpoveď od AI

Na sledovanie volaní metódy viewDidLoad vo všetkých inštanciách kontrolérov v iOS môžete použiť metódu swizzling — dynamickú náhradu implementácie metódy počas behu.

Prí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() {
        // Volanie pôvodnej `viewDidLoad` (teraz `swizzled_viewDidLoad`)
        swizzled_viewDidLoad()

        // Logovanie alebo iná logika
        print("volanie `viewDidLoad` pre \(type(of: self))")
    }
}

// Zavolajte swizzling raz, napríklad v AppDelegate
UIViewController.swizzleViewDidLoad

Tento prístup umožňuje zachytiť volania viewDidLoad pre všetky kontroléry bez zmeny ich zdrojového kódu.